0

私は 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] から結果を受け取るときに、アドレスか何かしか取得しないことです。前: " return *maxValueResult;" 3 つの値はすべて正しく、「結果: 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);

「Results: maxValue: 95 cord[0,1629976061]」と出力されます。ここで、95 は正しいですが、他の 2 つは正しくありません。これを修正するにはどうすればよいですか? おそらく私のコードからわかるように、私はあまり経験がありません。

編集: 警告について話すのを忘れていました。残念ながら、それらはスウェーデン語ですが、とにかくここに投稿します。互換性のないポインター型 /usr/include/pthread.h:144:5: 注: 'void **' が予期されますが、引数の型は 'int * (*)[3]' です matrixSumB.c: 関数 "Worker" 内: matrixSumB .c:172:1: 警告: return は、キャストなしで整数からポインタを作成します。"

敬具レオ

4

1 に答える 1

0

試しましたか

return maxValueResult[0];
return maxValueResult[1];
return maxValueResult[2];
于 2013-02-01T14:36:46.190 に答える