次のシナリオがあります。
1 つのタスクをいくつかのステージに分割します。各ステージには実際の作業を行うためのスレッドがいくつかあります。後のステージのスレッドは、現在のステージのすべてのスレッドが完了するまで待機する必要があります。
例えば:
スレッド 1、2、3 はステップ 1 の作業を行っています。
スレッド 4、5、6 はステップ 2 の作業を行っています。
スレッド 7、8、9 はステップ 3 を実行しています ...
各ステップのスレッドは独立していますが、前のステップのスレッドが終了するまで待機する必要があります。
これを達成したい方法は次のとおりです。
- 現在のステップの各スレッドで、現在のステップを開始できるかどうかを表す条件で待機します
- 現在のステップを開始できるようになると、すべてのスレッドが作業を開始し、バリアでこのステップのすべてのスレッドが終了するのを待ちます
- このステップのすべてのスレッドが終了した後、次のステップのスレッドが待機している条件変数でブロードキャストします
それは理にかなっていますか?ここで何か明らかに間違っていますか?
マルチスレッド プログラムの高水準言語構造にうんざりしており、pthread API を使用するのは苦痛です。ここで、このユース ケースのベスト プラクティスについてアドバイスが必要ですか? どうもありがとう