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"
ますか?