このコードは、プロデューサーの内部のミューテックスを待機することはありvoid push(data)
ますか?
もしそうなら、どうすればそれを回避できますか?
boost::mutex access;
boost::condition cond;
// consumer
data read()
{
boost::mutex::scoped_lock lock(access);
// this blocks until the data is ready
cond.wait(lock);
// queue is ready
return data_from_queue();
}
// producer
void push(data)
{
//<--- will a block ever happen here?
boost::mutex::scoped_lock lock(access);
// add data to queue
cond.notify_one();
}
for(;;) ループのスレッド プールがあり、このプール内のスレッドから read() が呼び出されているとします。次に、その上でデータを処理します。そして、いくつかの外部スレッドで push() を呼び出します。私の質問は、その外部スレッドが push(data) への呼び出しでブロックされることはありますか?