【发布时间】:2012-06-08 12:19:01
【问题描述】:
这是我的代码。很简单。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *func(void *arg)
{
printf("ID=%d\n", *(int*)arg);
pthread_exit(NULL);
}
int main()
{
pthread_t pt[4];
int i;
for (i = 0; i < 4; i++)
{
int temp = i;
pthread_create(&pt[i], NULL, func, (void*)&temp);
}
sleep(1);
return 0;
}
我编译了它:
gcc p_test.c -lpthread
我运行它。它打印了2 2 3 3。我又跑了一遍。它打印了2 3 3 2。
我的问题是:
为什么2 或3 打印了两次?
为什么不打印1 3 2 0 或任何其他结果?
【问题讨论】:
-
经典的未定义行为。一个普通的数据对象可能无法在一个线程中访问,而另一个线程正在或可能正在修改它。