0
static int barrier_counter = 0;
pthread_cond_t condition;
pthread_mutex_t local_lock;
int init_barrier(int n) {
if (n < 0) {
return -1;
}
barrier_counter = n;
pthread_mutex_init(&local_lock, NULL);
pthread_cond_init(&condition, NULL);
return 0;
}
int barrier() {
pthread_mutex_trylock(&local_lock);
barrier_counter--;
printf("inside barrier befor the while n is : %d \n",barrier_counter);
while (0 < barrier_counter) {
printf("inside the barrier n is : %d\n", barrier_counter);
pthread_cond_wait(&condition,&local_lock);
}
printf("befor bordcast : %d \n",barrier_counter);
pthread_cond_broadcast(&condition);
printf("done the brodcast when n is : %d \n",barrier_counter);
pthread_mutex_unlock(&local_lock);
return 0;
}
我們試圖實施障礙,但不知何故我們沒有做廣播,我們完成任何。 我們甚至不會死鎖,有幾個線程實際上正在等待,但不是我們在init_barrier中指定的數量。實施障礙問題
不要在這裏使用trylock,它可能會失敗,這將使你的'pthread_cond_wait'可能無法按預期工作。另外,爲什麼不使用pthread的障礙? – Hasturkun
@artlessnoise,這不是關於記憶障礙。 –
@JonathanWakely Thx。刪除* linux-kernel *標記可能是有道理的。 –