Я создаю n потоков и затем запускаю исполнение после разрушения барьера.
В глобальном пространстве данных:
int bkdown = 0;
В основном ():
pthread_barrier_init(&bar,NULL,n);
for(i=0;i<n;i++)
{
pthread_create(&threadIdArray[i],NULL,runner,NULL);
if(i==n-2)printf("breakdown imminent!\n");
if(i==n-1)printf("breakdown already occurred!\n");
}
В функции нитенаправителя:
void *runner(void *param)
{
pthread_barrier_wait(&bar);
if(bkdown==0){bkdown=1;printf("barrier broken down!\n");}
...
pthread_exit(NULL);
}
Ожидаемый заказ:
breakdown imminent!
barrier broken down!
breakdown already occurred!
Фактический заказ: (проверено многократно)
breakdown imminent!
breakdown already occurred!
barrier broken down!!
Может ли кто-нибудь объяснить, почему я не получаю сообщение "broken down"
до сообщения "already occurred"
?