問題タブ [barrier]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - posixセマフォを使用してバリアを実装する方法は?
posixセマフォを使用してバリアを実装する方法は?
関数 my_barrier_wait が呼び出されると、最初に (N-1) 回、配列 'arr' のセマフォを設定 (+1) し、スリープ状態になります (sem_wait を呼び出します)。N回目は「arr」のセマフォをデクリメントし、(予想どおり)「cont」配列のセマフォに+1をポストする[0..bar.number-1]スレッドを起動する必要があります。バリアのようには機能しません。
pthreads - pthread 同期に関するアドバイス/提案が必要 (条件変数とバリアの使用を組み合わせる)
次のシナリオがあります。
1 つのタスクをいくつかのステージに分割します。各ステージには実際の作業を行うためのスレッドがいくつかあります。後のステージのスレッドは、現在のステージのすべてのスレッドが完了するまで待機する必要があります。
例えば:
スレッド 1、2、3 はステップ 1 の作業を行っています。
スレッド 4、5、6 はステップ 2 の作業を行っています。
スレッド 7、8、9 はステップ 3 を実行しています ...
各ステップのスレッドは独立していますが、前のステップのスレッドが終了するまで待機する必要があります。
これを達成したい方法は次のとおりです。
- 現在のステップの各スレッドで、現在のステップを開始できるかどうかを表す条件で待機します
- 現在のステップを開始できるようになると、すべてのスレッドが作業を開始し、バリアでこのステップのすべてのスレッドが終了するのを待ちます
- このステップのすべてのスレッドが終了した後、次のステップのスレッドが待機している条件変数でブロードキャストします
それは理にかなっていますか?ここで何か明らかに間違っていますか?
マルチスレッド プログラムの高水準言語構造にうんざりしており、pthread API を使用するのは苦痛です。ここで、このユース ケースのベスト プラクティスについてアドバイスが必要ですか? どうもありがとう
pthreads - 複数の pthread バリアが必要になることはありますか? 例えば?
バリアは、Pthreads でかなり頻繁に使用されるようです。Pthreads は、新しいバリアの作成を支援する pthread_barrier_init() プリミティブを提供します。
しかし、私自身の経験では、複数のバリアを使用する*現実世界のプログラムは見たことがありません。私はグーグルでこのトピックを見ましたhttp://www.linuxquestions.org/questions/programming-9/when-do-you-need-more-than-1-pthread-barrier-variable-752164/。ただし、そのトピックでは、実際に複数のバリアが必要なサンプル プログラムは紹介されていません。
では、プログラムに複数のバリアが必要になることはあるのでしょうか? 実際の例はありますか?
コメントしてくれてありがとう!
c# - C# の Barrier クラスの RemoveParticipants による奇妙なデッドロック
C Sharp's Barrier を使用すると、非常に奇妙なデッドロックが発生しました。RemoveParticipants()
意図は、実際にどのように機能するかを確認することです。私は 2 つのスレッド (2 つのアクション) から始めましたbarrier.SignalAndWait();
。その後、1 つのスレッドが 1 人の参加者を削除します。この時点から、バリア カウントは 1 のみですbarrier.SignalAndWait();
。ただし、以下のプログラムはデッドロックです。
トレース中に受け取った出力は次のとおりです。
もう 1 つの注意点は、action2 のすべての System.Sleep() をコメント化し、action1 の System.Sleep() を非コメント化する場合です。その後、プログラムは終了します。
上記のプログラムがデッドロックする理由がわかりません。通過するはずの時間でaction2
停止するのはなぜですか(バリアカウントは 1 のみです)。barrier.SignalAndWait();
ご覧いただきありがとうございます。
ソリューションの概要:
この問題はプラットフォームに依存します。ネイティブ以外のプラットフォームで実行したためにデッドロックが発生しました。2 つのオンライン コンパイラ (1) http://www.compileonline.com/compile_csharp_online.php、(2) https://compilr.com/を使用して試してみたところ、デッドロックが発生しました。最初の唯一のコンパイラは、mono を使用して Windows 実行可能ファイル (非ネイティブ) を実行します。2 番目のオンライン コンパイラのプラットフォームについてはわかりません。
Phillip Scott Givens
ただし、およびで示唆されているようsvick
に、.Net 4.0 を実行している Visual C# 2010 にサンプルをネイティブにインストールして実行したところ、デッドロックは解消されました。
java - Java:CyclicBarrierが機能しない
ソフトはいくつかの計算を行う必要があります。合計62500ループで、1つのループ期間は0.5秒です。それは約8時間の作業になります(for in for in for)。100の別々のスレッドに分割する必要があり、作業時間は8分の作業に短縮されます。CPUが原因で、62500スレッドを開くことができません。もう一度、100スレッドよりも100スレッドだけ開くための解決策を見つける必要があります。CountDownLatchで試しましたが、サイクルをリセットできないため、解決策はCyclicBarrierになります。
そしてテストクラス
サイクルが機能していません。一度に200を開きます。デバッグ(日食)しようとしましたが、理由がわかりません。スレッドが次から次へとジャンプし、結果を追跡できません。
コンソールは次のようになります。
arm - ARMにおけるバリア(DSB、DMB、ISB)の実際のユースケース
DSB、DMB、およびISBは、命令の並べ替えを防ぐための障壁であることを理解しています。それぞれについて非常に良い説明をたくさん見つけることができますが、私がそれらを使用しなければならない場合を想像するのはかなり難しいです。
また、オープンソースコードからは、それらの障壁が時々見られますが、なぜそれらが使用されているのかを理解するのは非常に困難です。ほんの一例として、Linuxカーネル3.7のtcp_rcv_synsent_state_process関数には、次のような行があります。
ここで、smp_mb()は基本的にDMBです。実際の例をいくつか教えてください。それは障壁についてもっと理解するのに役立つでしょう。
c - OpenMP: 並列内の同期
私はこのようなコードを持っています
基本的に私はしたい: 1) 与えられた量のスレッドを生成します。各スレッドは、スレッドの ID に従って p のチャックを処理します。2) p の各要素は、dtnum 回処理する必要があります。処理にはランダムなイベントが含まれます。3) 50 回の反復ごとに、1 つのスレッドが別の操作を実行する必要があり、他のスレッドは待機します。
問題: gcc は警告を表示します: バリア領域は、ワークシェアリング、クリティカル、順序付き、マスター、または明示的なタスク領域内に密接にネストされていない可能性があります
私に何ができる?
memory - これはミューテックスを使用しないスレッド同期の正しい方法ですか?
これは、ミューテックスなしでスレッドを同期する正しい方法ですか? このコードは長時間実行する必要があります
c++ - OMP バリアと動的配列について
OMP は、動的配列の内容が最新であり、OMP バリアの後にすべてのスレッドに表示されることを保証しますか?