gpt4 book ai didi

c - 线程屏障同步

转载 作者:行者123 更新时间:2023-11-30 19:13:08 38 4
gpt4 key购买 nike

我想在线程上实现 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);

}

所以我对互斥锁有一些疑问。我确信在进入 func 时。 EnterBarrier 我必须锁定互斥锁,以便没有其他线程获取它并更改它,同时“等待”!但是我解锁了互斥锁和代码末尾,并且由于锁定的互斥锁,我不确定其他线程是否会进入 EnterBarrier。

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

最佳答案

事情应该是这样的。要锁定/解锁条件变量,需要函数。互斥体应该在一开始就被锁定

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);

}

关于c - 线程屏障同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864132/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com