2013-02-01 20 views
0

我正在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:警告:返回時將整數指針沒有投 「

親切的問候利奧

+1

你在哪裏創建maxValueResult?它是線程內的一個自動變量嗎?當線程退出時它可能會被破壞。 – Jay

+0

您應該可以通過問題中的代碼獲得編譯警告。語句'return * maxValueResult;'只返回'maxValueResult'數組中的第一個值,而不是指向數組的指針。當然,返回指向局部變量的指針是一個很大的禁忌。 –

+0

我在使用它的函數的開頭創建它。 – user2032546

回答

0

你有沒有嘗試

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

我現在做了,沒有任何區別。 – user2032546