我有两个线程。一种是创建结构并用数据填充它:
int main(int argc, char *argv[]) {
struct arg_struct args;
args.remoteSockfd = remoteSockfd;
/*...*/
args.active = 1;
然后我将其添加到数组中:
while(activeSockets[index].active!=0){
index++;
}
activeSockets[index] = args;
并创建新线程:
(void) pthread_create(&serverThread, NULL, threadBody, &args);
}
在第二个线程中,我有:
void *threadBody(void *args) {
/*...*/
arg_struct *foo = (arg_struct*) (args);
}
所以现在我可以访问结构中的变量:
sockfd = foo->remoteSockfd;
但是当我尝试修改它们时:
foo->active=0;
它不会更改第一个线程中的变量。如何从另一个线程修改第一个线程中的结构?
我怀疑你的问题就在这里:
activeSockets[index] = args;
这是复制结构中的数据,而不是指向它的指针。如果您修改参数,无论是否在另一个线程中,则 activeSockets 中的数据将不会更改。 你需要使 activeSockets 成为指针数组,而不是结构,或者将 &activeSockets[i] 传递给另一个线程。
反正这是我的猜测。