求解决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中,事件和锁分开的通知事件方法。