2

A Williams の素敵なブログを読んでいました。

http://www.justsoftwaresolutions.co.uk/threading/condition-variable-spurious-wakes.html

そして、1つのことが私を悩ませています:偽のウェイクのためにスレッドがウェイクアップするとき、ミューテックスがロックされていますか?

boost::mutex::scoped_lock lock(the_mutex);
while(the_queue.empty())
{
    the_condition_variable.wait(lock);
}

そうしないと .empty への呼び出しが安全でなくなるためだと思いますが、よくわかりません。

4

1 に答える 1

4

はい、ミューテックスがロックされています。基本的に、ミューテックスは、スレッドがブロックされている間のみ解放されthe_condition_variable.wait()ます。誤ったウェイクアップであろうとなかろうと、ミューテックスは表示されているコードの他の場所でロックされています。

ドキュメントからboost::condition_variable::wait()

事後条件:

lock現在のスレッドによってロックされています。

于 2013-03-23T17:45:41.360 に答える