pthread问题
这几天开始学pthread编程,尝试将行列式的计算并行化。
#define MaxThreadNum 20 //最大线程数
...
pthread_t threads[MaxThreadNum];
...
//线程函数
void cacu_thread(int threadID)
{
cout<<"Thread "<<threadID<<" start working."<<endl;
int thread_mastermode_num = det_dim/thread_num; //每个线程计算的主子式数量
int thread_start_location = threadID*thread_mastermode_num; //第一行行标
double* sub_numbers = new double[(det_dim-1)*(det_dim-1)];
double** mastermode = new double* [det_dim-1]; //计算主子式,避免反复开辟,可节省时间
for(int i=0;i<(det_dim-1);i++)
mastermode[i] = new double[det_dim-1];
for(int j=thread_start_location;j<(thread_start_location+thread_mastermode_num);j++){ //按第一行展开
for(int row=0;row<(det_dim-1);row++){
for(int column=0,sign=1;column<(det_dim-1);column++){
if(column==j){
sign = -1;
}
if(sign==1){
mastermode[row][column] = determinant[row+1][column];
}else{
mastermode[row][column] = determinant[row+1][column+1];
}
sub_numbers[row*(det_dim-1)+column] = mastermode[row][column];
}
}
private_det_value[threadID] += pow((-1.0),j)*determinant[0][j]*matrixDet(sub_numbers,(det_dim-1)*(det_dim-1));
}
delete [] sub_numbers;
for(int i=0;i<(det_dim-1);i++)
delete [] mastermode[i];
delete mastermode;
}
//计算行列式值
void cacuDet(double *numbers,int count)
{
det_value = 0.0;
for(int i=0;i<thread_num;i++){
pthread_create(&threads[i],NULL,cacu_thread,(void*)NULL);
}
}
运行报错:
pthread.cpp:18: 错误:array must be initialized with a brace-enclosed initializer
pthread.cpp: In function ‘void* cacu_thread(void*)’:
pthread.cpp:112: 错误:从类型 ‘void*’ 到类型 ‘int’ 中的 static_cast无效
是pthread_create函数中的pthread_t类型参数有问题吗?正确做法是什么呢?大家帮帮我。谢谢啦。
[最优解释]
void cacu_thread(int threadID)
pthread_create(&threads[i],NULL,cacu_thread,(void*)NULL);
看一下函数定义就知道哪里错了
最后那个参数,和函数参数一致
[其他解释]
已经弄好了。的确是参数的类型问题,初次接触真是问题多多。
谢谢你关注。