我在使用C时遇到了一些麻烦。我是一个相对较新的程序员,我试图创建一个结构并将其通过引用传递给两个线程。我希望一个线程将信息放入结构中,而另一个线程将信息添加并打印出来。我在说的伪代码如下:

typedef struct{ int x, y }addme;
main{
  addme argstopass;
  create_thread(method_store, (void*)&argstopass);
  create_thread(method_calc, (void*)&argstopass);
  //Code to tell store thread 'only' to run
  //Code to tell calc thread to run when store is finished.
  join_both_threads;
}

void method_store(void* args){
  addme info = *((addme*)args);
  info.a = 7;
  info.b = 3;
}

void method_calc(void* args){
  addme info = *((addme*)args);
  print(info.a+info.b);
}


问题是,当我尝试添加信息时,就像store方法从未更新过它。传递给线程的引用是相同的,所以我看不到为什么只要它们都有指向它的指针,它们就无法访问相同的信息。

希望这里有人可以启发我我做错了什么。如果不清楚,请发表评论,我会帮助您澄清。

最佳答案

addme info = *((addme*)args);


在堆栈上创建一个语言环境变量,并将argstopass的内容复制到其中。修改仅在此局部变量上发生,因此第二个线程将看不到。

采用

addme *info = args;
info->a = 7;


和第二个线程同上。您将必须确保第二个线程等待其printf()直到第一个线程修改了值。

09-04 07:31