从不同的线程修改struct中的变量

时间:2014-01-10 17:03:04

标签: c multithreading

我有两个主题。 一个是创建结构并用数据填充它:

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;

它不会在第一个线程中更改变量。如何在另一个线程的第一个线程中修改struct?

1 个答案:

答案 0 :(得分:0)

我怀疑你的问题在这里:

activeSockets[index] = args;

这是复制结构中的数据而不是指向它的指针。如果在另一个线程中修改args,则不会更改activeSockets中的数据。您需要将activeSockets设为指针数组,而不是结构体,或者将& activeSockets [i]传递给另一个线程。

无论如何,这是我的猜测。