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