我尝试在C ++中开发一个线程池,我想知道在工作线程的主循环中是否更好地yield()线程或者在条件变量上等待:
void worker_thread( void )
{
// this is more or less pseudocode
while( !done )
{
if( task_available )
run_task();
else
std::this_thread::yield();
}
}
与
void worker_thread( void )
{
// this is more or less pseudocode
std::unique_lock< std::mutex > lk( mutex_ );
while( !done )
{
if( task_available )
run_task();
else
condition_.wait( lk );
}
}
有任何想法吗?两个版本之间是否会有任何性能差异?