我一直有這個並行矩陣乘法代碼的麻煩,我試圖訪問我的結構中的數據成員時不斷收到錯誤。C++中的多線程矩陣乘法
這是我的主要功能:
struct arg_struct
{
int* arg1;
int* arg2;
int arg3;
int* arg4;
};
int main()
{
pthread_t allthreads[4];
int A [N*N];
int B [N*N];
int C [N*N];
randomMatrix(A);
randomMatrix(B);
printMatrix(A);
printMatrix(B);
struct arg_struct *args = (arg_struct*)malloc(sizeof(struct arg_struct));
args.arg1 = A;
args.arg2 = B;
int x;
for (int i = 0; i < 4; i++)
{
args.arg3 = i;
args.arg4 = C;
x = pthread_create(&allthreads[i], NULL, &matrixMultiplication, (void*)args);
if(x!=0)
exit(1);
}
return 0;
}
和matrixMultiplication方法可以從另一C文件中使用:
void *matrixMultiplication(void* arguments)
{
struct arg_struct* args = (struct arg_struct*) arguments;
int block = args.arg3;
int* A = args.arg1;
int* B = args.arg2;
int* C = args->arg4;
free(args);
int startln = getStartLineFromBlock(block);
int startcol = getStartColumnFromBlock(block);
for (int i = startln; i < startln+(N/2); i++)
{
for (int j = startcol; j < startcol+(N/2); j++)
{
setMatrixValue(C,0,i,j);
for(int k = 0; k < N; k++)
{
C[i*N+j] += (getMatrixValue(A,i,k) * getMatrixValue(B,k,j));
usleep(1);
}
}
}
}
另一個錯誤我正在創建線程時:「無效的轉換,從' void [](void)'[-fpermissive] 「
任何人都可以告訴我我做錯了什麼嗎?
你得到的第一個錯誤是什麼? – BeeOnRope
這是C除主函數 –
另一個錯誤,_where_你明白了嗎?換句話說,你能指出你的錯誤在哪裏? –