我有一个双屏障多线程程序,但我不知道如何创建一个公平的机制(使用POSIX互斥,条件变量屏障函数) - 意思是:线程组将通过到达屏障的到达时间进入第一道屏障。
我所拥有的代码的Pseodo代码(总结,原始代码有更多验证。希望它足够清楚) -
的mutex_lock;
++ _ barrier-> m_predicate;
/ *阻止所有线程(线程上的最后一个) - 在障碍集合点* /
中待定if(_barrier-> m_predicate!= _barrier-> m_barrierSize) { pthread_cond_wait(& _barrier-> m_cond,& _barrier-> m_mutex); }
否则
{
/ * *取消阻止所有线程(通过调度策略顺序)
目前被Barrier中的cond参数阻止
**重置:谓词值为“0” - >新一批螺纹
进入第一道屏障* /
pthread_cond_broadcast (&_barrier->m_cond);
ResetBarrier (_barrier);
}
/ *关键代码块的结尾* /
调用pthread_mutex_unlock(安培; _barrier-> m_mutex);