条件变量

无论是boost库的condition_variable,还是posix库的pthread_cond_t,使用模式基本一样。

如:

    boost::mutex _mut;    //互斥体

    boost::condition_variable _cond;    //条件变量

    {

    boost::mutex::scoped_lock lock(_mut): 

    while(condition){   //2.为什么不能用if(condition)

          _cond.wait(_mut);    //1.为什么要传入互斥锁

    }

    }

1.wait方法内部,先unlock下锁, 然后阻塞进程, 要不然其他使用该互斥锁的线程将被阻塞,发生死锁;

2.为什么是while(condition),而不是if(condition) ?

这是因为在notify_one()和wait返回之间,有时间差,假设在这个时间差内,还有另外一个线程t改变了condition,那么t在wait()返回之后,显然应该再检查一遍condition。

建议结合openflow项目的双端队列来理解条件变量的使用。给个链接:

https://github.com/helight/openflow/blob/master/common/blocking_queue.h


你可能感兴趣的:(条件变量)