我正在创建 n 个线程,然后在障碍击穿后开始执行。
在全局数据空间中:
int bkdown = 0;
在 main() 中:
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"
消息吗?