我正在使用 C 中的 pthreads 并且遇到了问题(再次)。我正在尝试将结果作为函数数组发送到我的主线程。
此代码查找每个工人(1 个工人/行)的最大值并保存该值的索引。到目前为止,一切都很好。我将在此功能下方解释我的问题。这段代码做我想要的。
for (i = first; i <= last; i++){
for (j = 0; j < size; j++){
total += matrix[i][j];
if(matrix[i][j] > biggest){
biggest = matrix[i][j];
x=i;
y=j;
maxValueResult[1]=i;
maxValueResult[2]=j;
}else if(matrix[i][j] < smallest){
smallest = matrix[i][j];
indexes[2]=i;
indexes[3]=j;
}
}
}
maxValueResult[0]=biggest;
maxValueResult[1]=x;
maxValueResult[2]=y;
printf("Results: maxValue: %d cord[%d,%d]\n",maxValueResult[0],maxValueResult[1],maxValueResult[2]);
return *maxValueResult;
我的问题是当我在 pthread_join 中收到结果时,只有 maxValueResult[0] 有效,从 maxValueResult[1] 和 maxValueResult[2] 我只能得到地址或其他东西。之前:“返回*maxValueResult;” 所有三个值都是正确的,看起来像这样:“结果:maxValue:95 cord[3,3]”
这是我调用 pthread_join 的地方:
for(l=0;l<numWorkers;l++){
pthread_join(workerid[l], &maxValue);
temp[l] = maxValue[0];
if(maxValue[0]<temp[1]){
maxValue[0] = temp[1];
xCORD = maxValue[1];
yCORD = maxValue[2];
}
}
printf("Results: maxValue: %d cord[%d,%d]\n",maxValue[0],xCORD,yCORD);
这将打印:“结果:maxValue:95 线 [0,1629976061]”,其中 95 是正确的,但其他两个不正确。我能做些什么来解决这个问题?正如您可能从我的代码中看到的那样,我不是很有经验。
编辑:我忘了告诉警告,我得到了几个!不幸的是它们是瑞典语,但我还是把它们贴在这里:“$ gcc -o sumb matrixSumB.c matrixSumB.c: In funkcion "main": matrixSumB.c:120:1: warning: passing argument 2 of 'pthread_join' from不兼容的指针类型 /usr/include/pthread.h:144:5:注意:预期的 'void **' 但参数的类型为 'int * (*)[3]' matrixSumB.c:在函数“Worker”中:matrixSumB .c:172:1: 警告:return 从整数中生成指针而不进行强制转换。”
亲切的问候狮子座