最適な同期方法を見つけようとしているシナリオがあります。C++11 の std::thread が存在することを前提としているため、さまざまなスレッド ライブラリの違いなどについて心配する必要はありません。
シナリオはこうです。メイン スレッドであるスレッド a は、一連のワーカー スレッドにタスクを渡したいと考えています。そして、ひとまず最後の命令を出した後、すべてのスレッドが作業を完了するのを待つ必要があります。私たちは彼らに加わりたくありません。ただ彼らが与えられた仕事を終えるのを待ちます。次に、スレッド a は、すべてのスレッドから収集されたデータを分析し、コマンドをワーカーに送信して手順を再開する必要があります。
要するに、これらは手順です。
- スレッド a はコマンド x をすべてのワーカー スレッドに送信します。
- スレッド a は、すべてのワーカーが終了するまで待機します。
- スレッド a が処理を行います。
- 1に戻ります。
何を使用することをお勧めしますか? 単純なミューテックス?条件変数? 2つの組み合わせ?可能な限り効率的に同期を構成する方法に関するヒントをいただければ幸いです。