求解决boost:condition_variable_any 有关问题的解决方法

求解决boost::condition_variable_any 问题的解决办法
处于跨平台考虑, 在编写一个生产者消费者队列时, 使用了Boost::condition_variable_any,  发现了如下问题。

// 开始保护消费者操作消费者队列的数据。
boost::unique_lock<boost::recursive_mutex> Lock (m_mtxConsumerListAccess);

// 如果没有可消费内容,则等待生产出新的消费项。 如果等待超时时,还没出现,则返回失败。
if(可消费数量 == 0 && !m_cndConsumerListAvailable.timewait(Lock, 20) )
{
     return false;
}

// ......

上述代码需要用到消息通知机制,使用了cndConsumerListAvailable, 该变量依赖锁。 这就导致了事件和锁居然相互搀和到一块了。 如果出现可消费数量为0现象,必然会降低系统运行效率。

求boost中,事件和锁分开的通知事件方法。
------解决方案--------------------
引用:
Quote: 引用:

条件变量本来就是和lock配合使用的,为啥要分开


考虑下, 消费者没有数据时候,等待生产者生产数据时给予通知。 这个时候,他根本没有必要占用锁。

相反由于消费者占用了锁,导致生产者不能执行后续代码。 所以要分开啊。


你没有理解con.wait(lock,...), 如条件不满足, 会先解锁, 再等待条件被满足。 等条件满足, 会上锁,再从wait返回。