线程屏障同步

Thread Barrier synchronization

我想在线程上实现 Barrier 同步技术

到目前为止我已经想出了一些代码,但我有一些问题..

    struct _ThreadBarrier {

    pthread_cond_t cond;
    int needed;
    int waiting;
    int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex); 
    pthread_mutex_t mut;
}


some other code for initilization etc ..




void enterBarrier(ThreadBarrier *barrier) {
    pthread_mutex_lock(&barrier->mut);


    waiting ++;
    if (waiting == needed){

            barrier->cond = 1;
            barrier->waiting = 0;
            pthread_cond_broadcast(&barrier->cond);


   }else{
           barrier->cond = 0;
           pthread_cond_wait&barrier->cond,&barrier->mut); 
   }



   pthread_mutex_unlock(&barrier->mult);

   }

所以我有一些关于互斥锁的问题。我确信在进入功能时。 enterBarrier 我必须锁定互斥锁,这样其他线程就不会获取它并同时更改 "waiting"!但是我解锁了互斥体和代码的末尾,我不确定其他线程是否会进入 enterBarrier,因为互斥体被锁定了。

我不完全确定这个互斥锁是如何工作的。

事情应该是这样的。对于lock/unlock条件变量,需要函数。互斥体应该在开始时被锁定

void enterBarrier(ThreadBarrier *barrier) {
pthread_mutex_lock(&barrier->mut);


barrier->waiting ++;

if (barrier->waiting == barrier->needed){

    barrier->waiting = 0;
    pthread_cond_broadcast(&barrier->cond);

}else{
    pthread_cond_wait(&barrier->cond,&barrier->mut); 

}

pthread_mutex_unlock(&barrier->mut);

}