pthread_cond_broadcast
は、条件変数で待機中の複数のスレッドを起動するために使用されます。しかし同時に、競合状態を避けるために条件変数の前にミューテックスを配置する必要があるとも言われています。条件変数の前にミューテックスを置くと、どのように多くのスレッドが条件変数を待つことができますか?
mutexが存在し、あるスレッドがすでにそのスレッドを保持していて変数を待っている場合、他のスレッドは同じミューテックスをどのように保持することができますか?
pthread_cond_broadcast
は、条件変数で待機中の複数のスレッドを起動するために使用されます。しかし同時に、競合状態を避けるために条件変数の前にミューテックスを配置する必要があるとも言われています。条件変数の前にミューテックスを置くと、どのように多くのスレッドが条件変数を待つことができますか?
mutexが存在し、あるスレッドがすでにそのスレッドを保持していて変数を待っている場合、他のスレッドは同じミューテックスをどのように保持することができますか?
スレッドがpthread_cond_wait()
を呼び出すとき、関連するミューテックスを保持する必要があります。 APIは、スレッドをブロックしている間にmutexを解放します。 APIがスレッドを解放する必要があると判断すると、APIから戻る前にmutexを取得します。
条件を確認してからpthread_cond_wait()
を呼び出すと、アトミックな操作ではないため、ミューテックスを保持する必要があります。ミューテックス(およびミューテックスの適切な使用)は、スレッドをチェックしてから待機を呼び出すまでの間に、スレッドが条件を満たさなくなることを防止します。
しかし、具体的な質問(他のスレッドがどのようにしてミューテックスを取得できるか)への短い答えは、スレッドがpthread_cond_wait()
でブロックされている間、ミューテックスは保持されないということです。
これは、最初にスレッドがmutexをロックしてから、同じmutexのロックを解除してロックを開始することを意味しますか? –
@Anisha:はい、スレッドが 'pthread_cond_wait()'で待機している間、mutexはロックされていません。 –
'APIがスレッドを解放する必要があると判断すると、APIから戻る前にmutexを取得します.'誰がmutexを取得しますか?スレッド? –