我正在寻找一种等待多个条件变量的方法。
IE。就像是:
boost::condition_variable cond1;
boost::condition_variable cond2;
void wait_for_data_to_process()
{
boost::unique_lock<boost::mutex> lock(mut);
wait_any(lock, cond1, cond2); //boost only provides cond1.wait(lock);
process_data();
}
条件变量可以实现类似的效果吗?如果没有,是否有替代解决方案?
Thanks
我不相信你可以用 boost::thread 做这样的事情。也许是因为 POSIX 条件变量不允许这种类型的构造。当然,Windows 有 WaitForMultipleObjects,如 aJ 发布的,如果您愿意将代码限制为 Windows 同步原语,这可能是一个解决方案。
另一种选择是使用更少的条件变量:只有 1 个条件变量,当任何“有趣”的事情发生时触发。然后,每当您想要等待时,您都可以运行一个循环来检查是否出现了您感兴趣的特定情况,如果没有出现,则返回等待条件变量。无论如何,您应该在这样的循环中等待这些条件变量,因为条件变量等待会受到虚假唤醒的影响(来自 boost::thread 文档,重点是我的):
void wait(boost::unique_lock<boost::mutex>& lock)
...
Effects:
原子调用lock.unlock()
并阻塞当前线程。当调用通知时,线程将解除阻塞this->notify_one()
or this->notify_all()
,或虚假。 ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)