問題タブ [pthread-barriers]
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.
c - pthreadsバリアの使用方法は?
こんにちはコードの大きなダンプを投稿して申し訳ありませんが、私はCコードで非常に新しいです、基本的に私は大学の割り当てを行っています、そして私は「pthread_barrier」を実装する必要があります、今私はバリアの概念を理解しています(または少なくとも私はそう思います)しかし、私はそれをどこに置くべきか正確にはわかりません。割り当ては次のように述べています。
「pthread_barrier_initとpthread_barrier_waitを使用して、すべてのプロデューサー/コンシューマースレッドが同時に生成/消費を開始するようにします。」
ちなみにこれは割り当ての追加のクレジット部分です
c - 同期に pthread バリアを使用するスレッドのクリーンで信頼性の高いシャットダウンのための良い戦略は何ですか?
この実行ループ (疑似コード) を無期限に実行する 4 つのスレッドを持つ pthread ベースのマルチスレッド プログラムがあります。
これは、ステージ 1 で各スレッドが独自の状態変数を更新するという点で非常にうまく機能します。ステージ 1 では、他のスレッドが他のスレッドの状態変数を読み取っていないため、問題ありません。次に、ステージ 2 では、スレッドが互いの状態を読み取る限り自由に使用できますが、ステージ 2 ではローカル状態変数を変更するスレッドがないため、事実上読み取り専用であるため、問題ありません。
唯一残っている問題は、アプリケーションを終了するときにこれらのスレッドをクリーンかつ確実にシャットダウンするにはどうすればよいかということです。(「クリーンかつ確実に」とは、潜在的なデッドロックや競合状態を導入することなく、理想的には pthread_barrier_wait() 呼び出しからスレッドを強制的に除外するために UNIX シグナルを送信する必要がないことを意味します)
私の main() スレッドはもちろん、スレッドごとに keepRunning を false に設定できますが、各スレッドに対して pthread_barrier_wait() を返すにはどうすればよいでしょうか? AFAICT pthread_barrier_wait() を返す唯一の方法は、4 つのスレッドすべての実行場所を pthread_barrier_wait() 内に同時に配置することですが、一部のスレッドが既に終了している可能性がある場合、これを行うのは困難です。
pthread_barrier_destroy() を呼び出すことは私がやりたいことのように思えますが、スレッドがバリアで待機している可能性がある間にそれを行うのは未定義の動作です。
この問題に対する適切な既知の解決策はありますか?
c - スレッドがバリアで永続的にブロックされている
さまざまなスレッド同期メカニズムを使用する割り当てに取り組んでいますが、頭痛の種は pthread_barrier_t だけです。
アイデアは、いくつかのスレッドのチェックポイントとしてバリアを実装することですが、それらは永続的にブロックされています。
ここでいくつかの回答を確認しましたが、実装は正しいようで、この単純なものを問題なくコンパイルして実行しました。
cpu.c (メインスレッドを含む):
units.c (他のスレッドの関数を含む):
いくつかのメモ:
- 私が参照している両方のファイルには、独自のヘッダーファイルがあります
- コードを短くするために、コードの一部を慎重に削除しました
- とにかく、関数本体はほとんど空です。バリアが機能するのを待っています
- コードを短く保つために、エラー チェックも削除されました (実行時にエラーは発生しません)。
- バリアカウントは、いくつかのスレッドの削除を反映しています
- バリアは cpu.h で拡張されます
ありがとう!
ada - Ada: pthread_barrier_wait のような動作ですか?
C の pthread_barrier_wait と同様の機能を持つバリアを Ada に実装しようとしています。Ada 2012 には Ada.Synchronous_Barriers がありますが、私のシステムでは利用できません (debian lenny の gnu-gnat)。
より具体的には、Ada 2012 を使用せずに、待機中のすべてのタスクを同時にバリアから解放し、理想的には、これらのタスクの 1 つに何か特別なことをさせるにはどうすればよいですか? 以下は、非常に最適ではない実装です。より良いアプローチは何ですか?
プログラム出力:
spring-integration - スレッドバリアが機能するには、常に 2 つのスレッドが必要ですか?
トリガーをチェックする着信イベントのために特定の時間間隔で DB を 2 ~ 3 回連続してポーリングし、最終的に Spring Integration プロジェクトでタイムアウトする必要があるという問題を解決するために、スレッドバリアが正しい方法であるかどうかを確認したかったのです。
また、スレッドバリアが機能するには常に 2 つのスレッドが必要ですか? サスペンド スレッドとトリガー スレッド。