0
我在理解爲什麼此代碼導致競態條件時遇到了一些麻煩。正如我所看到的,只要線程在foo函數中開始,就會用sem_wait阻塞另一個線程,然後在寫入myid之後釋放該塊。但是,我不斷得到Thread 2 Thread 2的輸出。我不明白這是如何發生的,因爲這些塊在寫周圍。有人可以幫我理順這個嗎?信號量(互斥量)示例,競賽條件
非常感謝。
sem_t s; /* semaphore s */
void *foo(void *vargp)
{
int myid;
sem_wait(&s);
myid = *((int *)vargp);
sem_post(&s);
printf("Thread %d\n", myid);
}
int main() {
pthread_t tid[2];
int i;
sem_init(&s, 0, 1);
for (i = 0; i < 2; i++)
pthread_create(&tid[i], 0, foo, &i);
pthread_join(tid[0], 0);
pthread_join(tid[1], 0);
}
真棒回覆,謝謝。 – A4Treok