問題タブ [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++ - 並列計算の障壁
ウィキペディアで例が見つかった障壁について読んでいました。それが正しいかどうかは疑問です。( https://en.wikipedia.org/wiki/Barrier_(computer_science)#Implementation )のコードは次のとおりです。
バリア関数では、最初のif
ブロックに入る前にleave_counter
と比較しP
て、 と等しいかどうかをチェックしP
ます。再びelse
ブロックで、比較があります。
leave_counter
値がの場合にのみコントロールに入るので、2 番目の比較の理由は何P
ですか? ここで何か不足していますか?
multithreading - 公正なマルチスレッド二重障壁を作成するには?
ダブルバリアマルチスレッドプログラムが動作していますが、公平なメカニズムを作成する方法がわかりません (POSIX ミューテックス、条件付き変数バリア関数を使用) - つまり、スレッドのグループは、バリアに到着するまでに最初のバリアに入ります。
私が今まで持っているコードの疑似コード (要約すると、元のコードにはより多くの検証があります。それが十分に明確であることを願っています) -
mutex_lock;
++_barrier->m_predicate;
/* すべてのスレッドをブロック (最後のスレッドを除く) - バリア ランデブー ポイントで保留中 */
if(_barrier->m_predicate != _barrier->m_barrierSize) { pthread_cond_wait(&_barrier->m_cond, &_barrier->m_mutex); }
else { /* * Barrier の cond パラメーターによって現在ブロックされているすべてのスレッドを (ポリシーの順序をスケジュールすることによって) ブロック解除します ** リセット: 述語の値は "0" --> スレッドの新しいバッチが最初の
バリアに入る *//* 重要なコード ブロックの終わり */
pthread_mutex_unlock(&_barrier->m_mutex);