この条件変数のブーストの例は、 への呼び出し中にミューテックスを保持する必要がないことを示していますcond.notify_one()。boost::condition_variableこれはスレッドセーフであることを意味しますか? つまり、「データの準備」スレッドがミューテックスを解放して を呼び出そうとするとcond.notify_one()、もう一方のスレッドが解放されたミューテックスを取得し、同時に への呼び出しを試みるとどうなりcond.wait(...)ますか?
1 に答える
2
boost::condition_variableその例は、それがスレッドセーフであることを意味するものではありません。それにもかかわらず、wait、wait_for、wait_until、notify_oneおよび
notify_allはスレッドセーフなメンバー関数です。
Boost.Threadは、C++11 標準 Thread ライブラリの準拠と拡張について説明しています。準拠するCondition 変数、 Class condition_variable、および Classをリストします。condition_variable_any
標準の関連部分 (§ 30.5-2) には次のように記載されています。
条件変数により、、、、およびメンバ関数を同時に呼び出す
waitことができwait_forますwait_until。notify_onenotify_all
于 2013-04-08T04:24:45.350 に答える