ダブルバリアマルチスレッドプログラムが動作していますが、公平なメカニズムを作成する方法がわかりません (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_cond_broadcast (&_barrier->m_cond); ResetBarrier (_barrier); }
/* 重要なコード ブロックの終わり */
pthread_mutex_unlock(&_barrier->m_mutex);