有一个重点,就是在传递参数的时候由于需要传递两个参数,所以应该构造一个结构体,然后把这个结构体的地址传递给pthread_create()函数当中,在runner()函数当中的如何获取这个结构体呢,就是定义一个结构体指针,然后赋值为这个地址,通过->就能取得其中的参数。
#include<stdio.h>
#include<pthread.h>
#define M 3
#define K 2
#define N 3
#define NUM_THREAD 10
int A[M][K]={{1,4},{2,5},{3,6}};
int B[K][N]={{8,7,6},{5,4,3}};
int C[M][N];
struct v
{
int i;
int j;
};
void *runner(void *p)
{
struct v* param;
param=p;
C[param->i][param->j]=0;
for(int k=0;k<K;k++)
{
C[param->i][param->j]+=A[param->i][k]*B[k][param->j];
}
pthread_exit(0);
}
int main()
{
pthread_t work[M*N];
pthread_attr_t attrs[M*N];
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
struct v vc;
vc.i=i;
vc.j=j;
pthread_attr_init(&attrs[i]);
pthread_create(&work[i],&attrs[i],runner,&vc);
pthread_join(work[i],NULL);
}
}
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
{
printf("%d\t",C[i][j]);
}
printf("\n");
}
return 0;
}