我正在C中使用pthreads,並且遇到了問題(再次)。 我想將結果作爲一個函數的數組發送到我的主線程。pthread_join從數組中的函數接收結果
此代碼爲每個工人(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;
我的問題是,當我recive在在pthread_join只有maxValueResult [0]工作的結果,從maxValueResult [1]和maxValueResult [2]我只得到地址什麼的。 之前:「return * maxValueResult;」所有這三個值是正確的,看起來像這樣: 「結果:包括maxValue:95線[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);
,打印這樣的: 「結果:最大值:95根線[0,1629976061]「,其中95是正確的,但不是其他兩個。 我能做些什麼來解決這個問題?正如你可能從我的代碼中看到的那樣,我不是很有經驗。
編輯:我忘了告訴警告,我得到了一對夫婦!不幸的是他們在瑞典語,但我反正他們在這裏: 「$ gcc -o sumb matrixSumB.c matrixSumB.c:在funkcion」main「: matrixSumB.c:120:1:warning:傳遞參數2' pthread_join'不兼容的指針類型 /usr/include/pthread.h:144:5:note:expected'void **'但參數的類型爲'int *(*)[3]' matrixSumB.c:In function 「工人」: matrixSumB.c:172:1:警告:返回時將整數指針沒有投 「
親切的問候利奧
你在哪裏創建maxValueResult?它是線程內的一個自動變量嗎?當線程退出時它可能會被破壞。 – Jay
您應該可以通過問題中的代碼獲得編譯警告。語句'return * maxValueResult;'只返回'maxValueResult'數組中的第一個值,而不是指向數組的指針。當然,返回指向局部變量的指針是一個很大的禁忌。 –
我在使用它的函數的開頭創建它。 – user2032546