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循环之外)还是有更好的选择? –