C语言 从不同的线程修改结构中的变量



我有两个线程。一种是创建结构并用数据填充它:

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] 传递给另一个线程。

反正这是我的猜测。

最新更新