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);
}
}