我有以下代码: 其中m_event是一个boost :: condition_variable
boost::scoped_lock dummy;
boost::unique_lock<boost::scoped_lock> lock(dummy); // TODO: see if dummy is correct
m_event.wait(lock, [this] () {
return !this ->m_enqueue.empty();
});
我真的不需要那个虚拟的储物柜我只希望事件在某个布尔条件下停止, 我不明白吗?
为什么我被迫使用假锁?
(P.S。代码效果很好..)
编辑: 事实上,如果我理解正确的话,我班上的内容是boost :: mutex,我们称之为m_mtx 和明显的插入器到m_enqueue .. 所以我正在改变我的实现相应的锁定以锁定m_lock然后插入器只会这样做:
boost::mutex::scoped_lock<boost::mutex> guard(m_lock);
有意义吗?
答案 0 :(得分:0)
timed_wait
等待锁定获得,如果它及时这样做。
没有锁定,它无能为力。
在我看来,你在滥用timed_wait
。