条件变量

不管是boost库的condition_variable,仍是posix库的pthread_cond_t,使用模式基本同样。git

如:github

    boost::mutex _mut;    //互斥体线程

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

    {进程

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

    while(condition){   //2.为何不能用if(condition) io

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

    } thread

    }变量

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

相关文章
相关标签/搜索