想要节省内存我有以下想法:
struct data{
double **A;
double **B;
double **C;
};
struct param{
struct data *v; // A,B,C
int n, i;
};
void* runner( void* param) {return;}
int main(int argc, char **argv)
{
int threads=10;
int **A,**B,**C;
struct data v;
v.A=A;
v.B=B;
v.C=C;
struct param *Parameter;
Parameter=malloc(threads*sizeof(struct param*));
for(int i=0;i<threads;i++)
{
Parameter[i].v=&v;
Parameter[i].i=0;
Parameter[i].n=threads;
}
pthread_t* threadNumber;
threadNumber = malloc(sizeof(pthread_t)*threads);
for (int i =0 ;i<threads;++i)
pthread_create(&threadNumber[i],NULL,matrix_vector,(void*) Parameter[i]);
for(int i=0;i<threads;++i)
pthread_join(threadNumber[i],NULL);
return 0;
}
然而编译器说:100:9:错误:无法转换为指针类型 (在pthread_create中,参数4) 这是可以预料的,但我不知道如何以这种风格修复它? 感谢您的提示!
答案 0 :(得分:1)
好吧,Parameter[i]
属于struct param
类型,据我所知,它对{C}中的void *
不具有强制性,所以你可能想要实际传递其地址,这是任
Parameter + i
或
&Parameter[i]