考虑以下代码
bool flag = false;
boost::condition_variable conditional;
boost::mutex mtx;
void wait() {
boost::mutex::scoped_lock lock(mtx);
if (flag)
return;
else
conditional.wait(lock);
}
void produce() {
boost::mutex::scoped_lock lock(mtx);
flag = true;
conditional.notify_all();
}
让我们说在wait()
中有任意数量的消费者睡着了。当生产者调用signal()
时,他们将全部醒来,然后依次获取并释放锁定。有没有办法让每个服务员都睡觉,这样当他们被制片人吵醒时,他们不必经历重新获得锁定的不必要的练习?