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 );
}
}
何か案は?両方のバージョンでパフォーマンスに違いはありますか?