将线程放在while(true)循环中并测试条件是否满足以开始处理是一种不好的做法吗?
void run()
{
for(;;)
{
if(dataReady)
{
processData();
}
}
}
使用等待/条件机制是否更可取:
void run()
{
for(;;)
{
if(dataReady)
{
processData();
}
lock_guard lock(mutex);
condition_.wait(lock);
}
}
另一个线程当然会调用condition_.notify_one()
编辑:
我希望几乎永远不必等待。
dataReady
是某种原子或受锁保护的数据类型,否则它将会导致数据竞争。(例如,如果它是一个普通的bool
类型。) - GManNickG