将参数传递给线程

Passing arguments to a thread

我有这个结构:

#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 的位置。

我该如何解决这个问题?

这是因为 &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]);
}

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