我有一个双屏障多线程程序正在工作,但我不知道如何创建一个公平机制(使用 POSIX 互斥锁,条件变量屏障函数) - 意思是:线程组将通过到达屏障的时间进入第一个屏障。
到目前为止我拥有的代码的伪代码(总结,原始代码有更多的验证。希望它足够清楚) -
互斥锁;
++_barrier->m_predicate;
/* 阻塞所有线程(除了最后一个线程) - 在屏障集合点挂起 */
if(_barrier->m_predicate != _barrier->m_barrierSize) { pthread_cond_wait(&_barrier->m_cond, &_barrier->m_mutex); }
else { /* *解除阻塞当前被Barrier中cond参数阻塞的所有线程(按调度策略顺序) **Reset: Predicate value is "0" --> 新一批线程
进入第一个屏障 */pthread_cond_broadcast (&_barrier->m_cond); ResetBarrier (_barrier); }
/* 关键代码块结束 */
pthread_mutex_unlock(&_barrier->m_mutex);