-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