1
我正在開發一個需要與下面的程序有點類似功能的項目,所以我試圖創建一個更簡單的程序來調試我的大型程序。我創建的線程返回的值與預期輸出不一致,但返回值不是隨機的。它幾乎看起來像線程正在返回其他線程的值,或者它們返回的變量(「tmp」)正在更新。線程返回值與預期輸出不一致
預期的輸出應該是...
#include <stdio.h>
#include <pthread.h>
struct Numbers {
int x;
int y;
};
void *go(void* param)
{
struct Numbers* nums = (struct Numbers*) param;
int sum = nums -> x + nums -> y;
return (void*) sum;
}
int main()
{
int result[2][2];
int tmp;
pthread_t thread[2][2];
int i, j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
struct Numbers nums;
nums.x = i;
nums.y = j;
pthread_create(&thread[i][j], NULL, go, &nums);
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
pthread_join(thread[i][j], (void*) &tmp);
result[i][j] = tmp;
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%d\t", result[i][j]);
}
printf("\n");
}
return 0;
}
考慮nums'的'壽命相比,當線程可能會嘗試訪問它。 – GManNickG
你是否保證'nums',不會被重寫所有的線程調用? – dvhh
@GManNickG我有一個完美的「Ohhhhh」時刻。所以我唯一的選擇是在創建線程之前準備所有的數據(嵌套的for循環之外)還是有更好的選擇? –