在这个作业中,应该为每个象限使用不同的线程添加两个矩阵。这是我到目前为止的尝试,它产生了一个我无法识别的段错误。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define N 4 //matrix dimension
int c[4][4];
int a[4][4]={1 ,3, 4, 5, 3, 4, 5, 6,7, 8, 9, 0, 2, 10, 3, 5};//test matrices
int b[4][4]={3, 4, 5, 6, 11, 7, 9, 3, 1, 1, 4, 5,1, 0, 0, 6};
void *cuadrante(void *argv[1]){
int t,i,j,k;
int opcion;
opcion = atoi(argv[1]); //meant to cast the quadrant number
switch (opcion){
case 1:
k=((N/2)-1); //A11 position
for (i=k;i=0;i--){ //1st quadrant
for (j=k;j=0;j--){
c[i][j]=a[i][j]+b[i][j];
}
}
break;
case 2:
k=((N/2)-1); //next to A11
for (i=k-1;i=0;i--){ //2nd quadrant
for (j=k;j<N;j++){
c[i][j]=a[i][j]+b[i][j];
}
}
break;
case 3:
t=N/2; //
for (i=t;i<N;i++){ //3rd quadrant
for (j=(t-1);j=0;j--){
c[i][j]=a[i][j]+b[i][j];
}
}
break;
case 4:
t=N/2; //position A22
for (i=t;i<N;i++){ //4th quadrant
for (j=t;j<N;j++){
c[i][j]=a[i][j]+b[i][j];
}
}
break;
default:
printf("\n Opcion erronea. Intente de nuevo");
}//fsw
}//end cuadrante
int main(int argc,char * argv[])
{
int rc, t;
pthread_t threads[4];
for(t=0;t<4;t++){
rc = pthread_create(&threads[t], NULL, cuadrante, (void *)argv[1]);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n",rc);
return -1;
}//end if
}//end for
printf("Created %d threads.\n", t);
pthread_exit(NULL);
return 0;
}//end main
答案 0 :(得分:0)
您将argv[1]
作为参数传递给所有4个线程;所以他们最终都不会通过switch语句采用相同的路径吗?
此外,您的函数将其参数声明为void **
,但您将char *
强制转换为void *
。这必然会引起问题。你可能想要这个:
void *cuadrante(void *arg){
int t,i,j,k;
int opcion;
opcion = atoi((char *)arg); //meant to cast the quadrant number
...
答案 1 :(得分:0)
如果所有其他方法都失败,请使用printf填充代码。你会在15分钟内找到问题。