条件変数の以下の単純な例で考えてみましょう:条件変数とロックを使用して
bool pause = true;
boost::mutex::scoped_lock lock(m_mutex);
while (!pause) cv.wait(lock);
と
boost::mutex::scoped_lock lock(m_mutex);
pause = false;
cv.notify_one();
たちが実行している場合、我々は基本的に、ここに
scoped_lock
または他のロックが必要ですがバイト単位の更新をサポートするプロセッサ上のコード。これは、本質的に、boolの割り当てがアトミックであることを意味します。これはx86プロセッサの場合によく見られます。
2つのスレッドが2つの異なるプロセッサ上で実行されており、別々のキャッシュを持っている場合に、変数の同期化と関係がありますか?
'(中断)cv.wait(ロック);'書き込むことができます 'cv.wait(ロック、[&] {戻りポーズ;}); ' – Jarod42
示されたコードは正しいです、' pause'は保護されています現在のロックで。あなたはロックガードを取り外すことができるかどうか尋ねますか? – Jarod42
はい、コードは本当に正しいです。私の質問は、ロックガードが必要なのか? – user3286661