将参数传递给线程
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_create
的 NUM_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]);
}
然后每个线程得到一个指向不同实例的指针。
我有这个结构:
#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_create
的 NUM_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]);
}
然后每个线程得到一个指向不同实例的指针。