-1
我想要实现的线程线程屏障同步
到目前为止,我想出了一些代码屏障同步技术,但我有一些问题..
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,因为互斥锁被锁定了。
我不完全确定这个互斥量究竟是如何工作的。
人们认为问#2的问题,预计前手做基础研究。你的问题不是关于你显示的代码,而是关于一般的互斥体。你应该能够在网上找到很多有关这方面的信息。开始花时间阅读[pthread手册页](http://linux.die.net/man/3/pthread_mutex_lock),如果能够理解,将会回答你的问题。 – kaylum
[如果互斥量已经被锁定,调用线程将阻塞,直到互斥量变为可用。](http://linux.die.net/man/3/pthread_mutex_lock) – LPs
是的,我阅读man页面:)但它是我不清楚这就是为什么我问这个问题......所以我在这里实施的锁是有效的,并且不会按预期工作?它应该如何?感谢您的时间 – Mladia