JDK の同時実行パッケージ、Boost のスレッド ライブラリ、Perl の Thread ライブラリ (Python ではありません) はすべてバリアを実装しています。
3 に答える
バリアは、不自然な例を通じてあらゆる場所で使用できますが、多くの場合、処理を進める前にさまざまなスレッドの結果がすべて必要なスキャッター/リデュース メソッドで使用されているように見えます。
たとえば、並べ替えを並列化したい場合は、リストを n 回分割し、n 個のスレッドを開始してセクションを並べ替えて一時停止できます。すべてが終了すると、並べ替えられたチャンクを最終的に結合しても問題ないことを親に知らせて終了します。(より良い方法があることは知っていますが、これは 1 つの実装です)。
私が見た他の場所は、ペイロードごとに一定量のデータを送信する必要がある並列ネットワークです。そのため、インターフェイスは n 個のバケットを起動し、それらがすべて満たされるのを待ってから送信を送信します。パーティション化された T1 回線について考えると、1 つのパーティションのデータを送信するよりも、64 の多重化されたパーティションを介して 1 つのバースト データを送信する方が適切です (パケットに 0 を埋め込む必要があるため、本質的に同じコストがかかります)。
これらが問題について考えさせるためのものであることを願っています!
例:スレッドのセットは結果セットを計算するために同時に動作し、その結果セット (一部/合計) は、「バリア」にある一部/すべてのスレッドへの処理の次の段階の入力として必要です。
conditions
バリアを使用すると、複数の&に関するソリューションを作成することなく、複数のスレッドを簡単に同期できmutexes
ます。
よく見かけるとは言えませんbarriers
が。ある時点で、スレッドの数が増えるにつれて、デッドロックの可能性を管理するために、より「分離された」システムを検討する価値があるかもしれません。