ライブラリpthread.h
はpthread_rwlock_t
FIFOですか?pthread読み書きロックはFIFOですか?
次の例では、複数のスレッドがあります。すべてのスレッドが順番に実行されることを保証しているとします。
// Thread 1 - does a write lock
pthread_rwlock_wrlock(&lock);
// Thread 2 - does a read but has to wait for 1
pthread_rwlock_rdlock(&lock);
// Thread 3 - does a read but has to wait for 1
pthread_rwlock_rdlock(&lock);
// Thread 4 - does a write but has to wait for 1
pthread_rwlock_wrlock(&lock);
// Thread 1 - unlocks
pthread_rwlock_unlock(&lock);
// who gets the lock?
スレッド1がロックを解除した後、誰がロックを取得したか?スレッド2とスレッド3が保証されますか?それとも、おそらく4に与えることができますか?
再び、すべてのスレッドが順番に実行され、スレッド1がすべてのスレッドがロックを取得しようとするまでロックを解放しないとします。
ここでFIFOという用語は当てはまりません。スレッドは、任意の順序で実行されるとは限りません。そのようなことを前提にすると、マルチスレッドの問題が発生することがよくあります。あなたの_imagine_フレーズは意味がありません。なぜなら実際には別の方法です。ロックされたスレッドが実行されるスレッドです。 – VTT
'thread1'で' join'を呼び出して、 'thread1'が終了するのを待つことができます。 ''スレッドは、ロックのスケジューリング方針に依存するため、必ずしも真ではありません。 'read-write'ロックの代わりにシンプルな' mutex'があれば、 'mutex'内の' FIFO'スケジューリング方針を使って、スレッドが順番に実行されることを保証できます。 –