pthread_join从数组中的函数接收结果

时间:2013-02-01 13:14:54

标签: c pthreads pthread-join

我正在使用C中的pthreads并且遇到了问题(再次)。 我试图将结果作为函数数组发送到我的主线程。

此代码查找每个worker(1worker / row)的最大值,并保存该值的索引。到现在为止还挺好。 我将在此功能下解释我的问题。这段代码符合我的要求。

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]我只得到地址或其他东西。 之前:“return * 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 cord [0,1629976061]”,其中95是正确的但不是另外两个。 我该怎么做才能解决这个问题? 正如您可能从我的代码中看到的那样,我不是很有经验。

编辑:我忘了告诉警告,我得到一对!不幸的是他们是瑞典语,但无论如何我都把它们发布在这里: “$ gcc -o sumb matrixSumB.c matrixSumB.c:在funkcion“main”中: matrixSumB.c:120:1:警告:从不兼容的指针类型传递'pthread_join'的参数2 /usr/include/pthread.h:144:5:注意:预期'void **'但参数类型为'int *(*)[3]' matrixSumB.c:在函数“Worker”中: matrixSumB.c:172:1:warning:return在没有强制转换的情况下从整数中生成指针。 “

亲切的问候狮子座

1 个答案:

答案 0 :(得分:0)

你试过吗

return maxValueResult[0];
return maxValueResult[1];
return maxValueResult[2];