這是我的代碼。這很簡單。Linux Pthread參數
#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
或其他結果?
經典未定義行爲。一個普通的數據對象可能無法在一個線程中訪問,而另一個線程正在或可能正在修改它。 –