現在、C++ 11で_std::thread
_を使用してマルチスレッドプロジェクトを実装しています。スレッドの同期には_std::condition_variable
_を使用します。詳細には、1つのコンシューマー関数が_std::condition_variable
_のwait()
メンバー関数を呼び出してグローバルタスクキューからのタスクを待機し、別のプロデューサー関数がタスクを生成してキューに入れます。しかし、_std::condition_variable
_のnotify_all()
とnotify_one()
のメンバー関数の違いはわかりません。プロデューサー関数ではどの関数を使用する必要がありますか?ありがとう!
たとえば、条件変数でブロックされているスレッドが10個ある場合、notify_one()
は1つのスレッドのみブロックを解除し、notify_all()
はそれらすべてをブロック解除します。あなたのケースでは、notify_one()
を使用して、待機している作業がないスレッドをウェイクアップしないようにする必要があります。