私は教科書のコードを見ている:David R. ButenhofによるPOSIXスレッドを使ったプログラミング。私はちょっと混乱している場所に出くわした。pthread_cond_waitにあるスレッドが関連するmutexを再獲得する間、スレッドをキャンセルしますか?
コードでは、スレッドに対してクリーンアップハンドラが登録されています。クリーンアップハンドラは、そのスレッド内の条件によって使用されるミューテックスのロックを解除します。
スレッドがgenerealの場合、pthread_cond_waitが呼び出されると(関連するmutexがロックされている必要があります)、mutexはロックされていますが、スレッドは待機しています。すなわち、信号または放送が起こった)。
condition_waitにはmutexがロックされていないため、スレッドが待機中に取り消された場合でも、そのmutexはロックされていないと考えられます。なぜクリーンアップハンドラはフリーにする必要がありますか?それ?
実際に、私はすでにロックされていたmutexのロックを解除することは実際にはエラーであり、これを悪化させると考えました。誰かが私が混乱していると思うところを教えてもらえますか?
参考に感謝します:) –