0

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

到目前为止我拥有的代码的伪代码(总结,原始代码有更多的验证。希望它足够清楚) -

  1. 互斥锁;

  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参数阻塞的所有线程(按调度策略顺序) **Reset: Predicate value is "0" --> 新一批线程
    进入第一个屏障 */

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

    /* 关键代码块结束 */

    pthread_mutex_unlock(&_barrier->m_mutex);

4

0 回答 0