web-dev-qa-db-ja.com

std :: condition_variableのnotify_all()とnotify_one()の違いは何ですか?

現在、C++ 11で_std::thread_を使用してマルチスレッドプロジェクトを実装しています。スレッドの同期には_std::condition_variable_を使用します。詳細には、1つのコンシューマー関数が_std::condition_variable_のwait()メンバー関数を呼び出してグローバルタスクキューからのタスクを待機し、別のプロデューサー関数がタスクを生成してキューに入れます。しかし、_std::condition_variable_のnotify_all()notify_one()のメンバー関数の違いはわかりません。プロデューサー関数ではどの関数を使用する必要がありますか?ありがとう!

36
Yun Huang

たとえば、条件変数でブロックされているスレッドが10個ある場合、notify_one()は1つのスレッドのみブロックを解除し、notify_all()はそれらすべてをブロック解除します。あなたのケースでは、notify_one()を使用して、待機している作業がないスレッドをウェイクアップしないようにする必要があります。

32
GManNickG