【发布时间】:2015-08-08 20:13:24
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
int p=2; //nr de thread-uri
int **a, **c;
int n=4;
void *Matrix_Add(void *);
int main(){
int i, j, q;
int *params;
pthread_t *ids;
a=(int**)malloc(sizeof(int*)*n);
c=(int**)malloc(sizeof(int*)*n);
for(i=0; i<n; i++){
a[i]=(int*)malloc(sizeof(int)*n);
c[i]=(int*)malloc(sizeof(int));
}
params=(int*)malloc(sizeof(int)*p);
ids=(pthread_t*)malloc(sizeof(pthread_t)*p);
for(i=0; i<n; i++){
for(j=0; j<n; j++){
a[i][j]=1;
}
}
for(i=0; i<n; i++){
for(j=0; j<n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
for(q=0; q<p; q++){
params[q]=q;
pthread_create(&ids[q], 0, Matrix_Add, (void*)params[q]);
}
for(q=0; q<p; q++){
pthread_join(ids[q], 0);
}
return 0;
}
void *Matrix_Add(void *params){
int i, j, first, last;
int q=*(int*)params;
int s=n/p;
first=q*s;
last=first+s;
for(i=first; i<last; i++){
c[i]=0;
for(j=0; j<n; j++){
c[i]+=a[i][j];
}
}
return 0;
}
程序应该创建 2 个线程,将 2d 数组的行 2 除以 2(每个线程 2 行),然后计算矩阵 a 的每一行的总和并将其写入矩阵 c。矩阵 c 应该有 n 行和 1 列。
【问题讨论】:
标签: c multithreading segmentation-fault