【发布时间】:2012-10-29 07:56:24
【问题描述】:
我在使用这个并行矩阵乘法代码时遇到了问题,在尝试访问我的结构中的数据成员时一直出错。
这是我的主要功能:
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;
}
以及从另一个 C 文件中使用的 matrixMultiplication 方法:
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 ()(int, int*, int, int*)' 到 'void* () 的无效转换(void)' [-fpermissive] "
谁能告诉我我做错了什么?
【问题讨论】:
-
您遇到的第一个错误是什么?
-
这是C,除了main函数
-
另一个错误,在哪里你得到它了吗?换句话说,你能指出你在哪里得到了那个错误吗?
-
这是另一条错误消息:“parallel.c:41:82: error: invalid conversion from 'void ()(int, int*, int, int* )' 到 'void* ()(void)' [-fpermissive] /usr/include/pthread.h:225:12: 错误:初始化参数 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* ()(void), void*)' [-fpermissive] " 和线程创建在同一行
-
您在该行之前声明了另一个名为
matrixMultiplication的函数吗?如果是这样,请重命名您的void *matricMultiplication(void*)函数以避免冲突
标签: c++ multithreading posix