我有这个结构:

#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);
}


我的问题是,当我在函数j中访问sum时,它始终为4,并且每次应为一个不同的数字,从0到4。我试图将其更改为

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


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

我该如何解决?

最佳答案

这是因为&structure始终与您对NUM_Tpthread_create调用相同。

你可以试试

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]);
}


然后每个线程都会获得一个指向不同实例的指针。

关于c - 将参数传递给线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30221308/

10-11 16:34