gpt4 book ai didi

c++ - 提升线程 notify_all() 和 sleep()

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:22 27 4
gpt4 key购买 nike

boost::condition_variable cond;
boost::mutex mut;
bool ready = false;

void consumer() {
boost::mutex::scoped_lock lock(mut);
while (!ready) {
cond.wait(lock);
}
}

void producer() {
boost::mutex::scoped_lock lock(mut);
ready = true;
cond.notify_all();
boost::this_thread::sleep(boost::posix_time::seconds(4));
}

引用上面的代码,其实我在调用notify_all()后让生产者线程休眠了4秒。然而,消费者线程实际上在 4 秒后被唤醒。那么我怎样才能解决这个问题并在我调用 notify_all() 后立即唤醒消费者线程,尽管有 4 秒的 sleep 时间。提前致谢。

最佳答案

它与 boost::mutex::scoped_lock lock(mut) 有关;在制作人中。由于作用域在 sleep 后结束,互斥锁仅在它之后释放。

如果你想保留你的 scoped_lock,试试这个。

void producer() {
{
boost::mutex::scoped_lock lock(mut);
ready = true;
cond.notify_all();
}
boost::this_thread::sleep(boost::posix_time::seconds(4));
}

关于c++ - 提升线程 notify_all() 和 sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com