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);
}
}
противповышение :: condition_variable и замок
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()'. Вы всегда должны «ждать» в цикле, каждый раз проверяя * условие * (или используйте перегрузку, которая берет предикат). –