Будет ли этот код когда-либо ждать мьютекса внутри 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();
}
Допустим, у меня есть пул потоков для цикла (;;), и у меня есть вызов read () из потока в этом пуле. Затем обрабатываю данные о нем. И я вызываю push () с каким-то внешним потоком. Мой вопрос: может ли этот внешний поток когда-либо блокироваться при вызове push (данных)?