2015-05-13 154 views
0

我有这样的结构:传递参数给线程

#define NUM_T 5 

typedef struct { 
    int j; 
    int vetor[BUFFER_SIZE]; 
} estrutura_main; 

,我想作为参数传递给线程:

estrutura_main structure; 
for(i=0;i<NUM_T;i++){ 
     structure.j=i; 
     pthread_create(&threads[i], NULL, sum,(void*)&structure); 
} 

我的问题是,当我在功能sum访问j是总是4,并且它应该每次都是一个不同的数字,从0到4.我试过将它改为

typedef struct { 
    int j[NUM_T]; 
    int vetor[BUFFER_SIZE]; 
} estrutura_main; 

,但我无法访问线程中想要的j的位置。

我该如何解决这个问题?

+0

您只为单个“结构”分配存储空间。所以在你的循环中,你改变了单个结构的j的值。你想每个pthread_create独特的结构?如果这样使用数组estrutura_main structure [NUM_T]; – Ross

回答

0

这是因为&structure总是与您拨打pthread_createNUM_T调用相同。

您可以尝试

estrutura_main structure[NUM_T]; 
for(i=0;i<NUM_T;i++){ 
    structure[i].j=i; 
    pthread_create(&threads[i], NULL, sum, (void*)&structure[i]); 
} 

则每个线程的指针,不同的实例。

+0

是的,这很有用,谢谢 –