この場合、並列パターンについて話すことができるかどうかはわかりません。パターンは、などの単なる同期メカニズムよりもはるかに高いレベルの抽象化にありAutoResetEvent
ます。
並列パターンについて話すときは、データ構造の幾何学的分解、並列分割統治、プロデューサー-コンシューマーなどの一般的な並列処理の問題を解決する一般的な方法を指します。レベルのメカニズムであり、言語やプラットフォームに依存しません。
AutoResetEvent
.NET同期メカニズムです。クラスと一緒に使用して、具体的なケースThread
で上記のパターンの1つを実装できますが、この実装は、たとえばpthreadや条件変数に置き換えることができます。
並列処理の問題を解決するときに物事を見るように教えられた方法は、抽象から具体まで、次の3つのステップに沿っていました。
- 該当する並列パターンを特定する
- パターンを実装するための適切なアルゴリズムを特定します
- アルゴリズムを実装するための適切な低レベルのメカニズムを特定する
編集:わかりました。古い「もの」を調べた後、を使用して実装できるパターンを特定しましたAutoResetEvent
。問題の良い説明については、ここで私の古い質問をチェックしてください:並列アプリケーションはランダムな動作をします
説明からわかるように、割り当てられた行の計算を開始する前に、各スレッドは、コンパニオンスレッドが前の行の少なくとも最初のいくつかの項目を処理するのを待つ必要があります。つまり、各スレッドは、割り当てられた各行の先頭でブロックし、シグナルを待つ必要があります。したがって、マトリックスを処理する3つのスレッドがあるとすると、スレッド0は行0、3、6 ...の先頭でブロックされます。スレッド1は行1、4、7...などでブロックされます。
各スレッドは数回ブロックする必要があるため、この通知待ちの動作はスレッドごとに簡単に実装できますAutoResetEvent
。つまり、イベントを数回リセットする必要があり、シーケンスですぐに通知される危険はありません。スレッドは互いに進むのを待つ必要があります。