0

ダブルバリアマルチスレッドプログラムが動作していますが、公平なメカニズムを作成する方法がわかりません (POSIX ミューテックス、条件付き変数バリア関数を使用) - つまり、スレッドのグループは、バリアに到着するまでに最初のバリアに入ります。

私が今まで持っているコードの疑似コード (要約すると、元のコードにはより多くの検証があります。それが十分に明確であることを願っています) -

  1. mutex_lock;

  2. ++_barrier->m_predicate;

  3. /* すべてのスレッドをブロック (最後のスレッドを除く) - バリア ランデブー ポイントで保留中 */

    if(_barrier->m_predicate != _barrier->m_barrierSize) { pthread_cond_wait(&_barrier->m_cond, &_barrier->m_mutex); }

  4. else { /* * Barrier の cond パラメーターによって現在ブロックされているすべてのスレッドを (ポリシーの順序をスケジュールすることによって) ブロック解除します ** リセット: 述語の値は "0" --> スレッドの新しいバッチが最初の
    バリアに入る */

        pthread_cond_broadcast (&_barrier->m_cond);
        ResetBarrier (_barrier);
    }
    

    /* 重要なコード ブロックの終わり */

    pthread_mutex_unlock(&_barrier->m_mutex);

4

0 に答える 0