は、私はC++でのスレッドプールを開発しようとすると、ワーカースレッドのメインループで)(スレッドを生成するか、条件変数を待つ方が良い場合、私は疑問に思う:スレッドプールの実装:condition_variables対収量()
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);
}
}
任意のアイデア対
void worker_thread(void)
{
// this is more or less pseudocode
while(!done)
{
if(task_available)
run_task();
else
std::this_thread::yield();
}
}
?両方のバージョンの間にパフォーマンスの違いはありますか?
条件付きアプローチはどのように実装されていますか?彼らは上記のworker_threadと同様の待機メカニズムを持っていますか? – headmyshoulder
yieldは、現在のプロセッサ上で実行する準備ができている別のスレッド(ウィンドウの場合、SwitchToThreadを参照)に呼び出しスレッドを実行させます。条件の場合は –
、pthread_cond_waitを参照してください。 (ウィンドウ上のイベントのように)条件が成立するまで、スレッドはスリープ状態になります。 –