49

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

4

1 に答える 1

49

たとえば、条件変数で 10 個のスレッドがブロックされている場合、notify_one()は 1 つのスレッドのみをブロック解除し、 はすべてのスレッドnotify_all()をブロック解除します。あなたの場合、使用したいnotify_one()ので、待っている仕事がないスレッドを起こさないようにします。

于 2012-01-26T09:00:54.680 に答える