【发布时间】:2012-02-02 19:39:39
【问题描述】:
boost::condition_variable cond;
boost::mutex mut;
//thread1
{
"read_socket()"
cond.notify_one();
}
//thread2
{
for(;;)
{
...
boost::unique_lock<boost::mutex> lock(mut);
cond.wait(lock);
}
}
对
boost::condition_variable cond;
boost::mutex mut;
//thread1
{
"read_socket()"
boost::unique_lock<boost::mutex> lock(mut);
cond.notify_one();
}
//thread2
{
for(;;)
{
...
boost::unique_lock<boost::mutex> lock(mut);
cond.wait(lock);
}
如果我在调用 cond.notify_one() 之前省略了锁会有影响吗?
【问题讨论】:
-
cond.wait(lock)可以在调用notify_one()之前恢复。您应该始终wait在循环中,每次都测试 条件(或使用带有谓词的重载)。
标签: c++ multithreading boost