如何创建一个公平的多线程双重障碍?

时间:2017-10-28 12:28:19

标签: multithreading ipc mutex barrier pthread-barriers

我有一个双屏障多线程程序,但我不知道如何创建一个公平的机制(使用POSIX互斥,条件变量屏障函数) - 意思是:线程组将通过到达屏障的到达时间进入第一道屏障。

我所拥有的代码的Pseodo代码(总结,原始代码有更多验证。希望它足够清楚) -

  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. 否则     {         / * *取消阻止所有线程(通过调度策略顺序)             目前被Barrier中的cond参数阻止            **重置:谓词值为“0” - >新一批螺纹
                  进入第一道屏障* /

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

    / *关键代码块的结尾* /

    调用pthread_mutex_unlock(安培; _barrier-> m_mutex);

0 个答案:

没有答案