1

この条件変数のブーストの例は、 への呼び出し中にミューテックスを保持する必要がないことを示していますcond.notify_one()boost::condition_variableこれはスレッドセーフであることを意味しますか? つまり、「データの準備」スレッドがミューテックスを解放して を呼び出そうとするとcond.notify_one()、もう一方のスレッドが解放されたミューテックスを取得し、同時に への呼び出しを試みるとどうなりcond.wait(...)ますか?

4

1 に答える 1

2

boost::condition_variableその例は、それがスレッドセーフであることを意味するものではありません。それにもかかわらず、waitwait_forwait_untilnotify_oneおよび notify_allはスレッドセーフなメンバー関数です。

Boost.Threadは、C++11 標準 Thread ライブラリの準拠と拡張について説明しています。準拠するCondition 変数、 Class condition_variable、および Classをリストします。condition_variable_any

標準の関連部分 (§ 30.5-2) には次のように記載されています。

条件変数により、、、、およびメンバ関数を同時に呼び出すwaitことができwait_forますwait_untilnotify_onenotify_all

于 2013-04-08T04:24:45.350 に答える