Я создаю 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"
сообщением?