锁定等效于Boost :: condition_variable

时间:2014-07-21 22:18:15

标签: multithreading boost synchronization mutex

考虑以下代码

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()时,他们将全部醒来,然后依次获取并释放锁定。有没有办法让每个服务员都睡觉,这样当他们被制片人吵醒时,他们不必经历重新获得锁定的不必要的练习?

0 个答案:

没有答案