用线程递归传递数据

Passing data recursively with threads

本文关键字:数据 递归 线程      更新时间:2023-10-16

我试图通过线程递归传递值。

在我的示例中,我正在创建一个线程,然后传递了一些数据,此线程将递归创建另一个线程,这也传递了一些数据。

输出如下:

Thread 1: value = 8
Thread 2: value = 12318230

为什么即使我分配了值4?

根据我的理解(如果我错了,请纠正我),每个线程都有自己的堆栈。当我将值4传递给线程2(第一个线程创建的线程)时,该变量在内存中直到线程结束为止。由于我打电话给pthread_join,所以我等到孩子线程结束直到恢复。我不确定线程2的值是一个随机数。

int count = 0
typedef struct
{
  int value;
} ThreadInfo;
void* ChildWork(void* a) {
  pthread_t threadid;
  count++;
  if(count > 2)
  pthread_exit(0);
  ThreadInfo* info = (ThreadInfo*)a; 
  printf("value = %dn", info->value);
  ThreadInfo* child = new ThreadInfo; 
  child->value = 4;
  pthread_create(&threadid, NULL, ChildWork, (void*)&child);
  pthread_join(threadid, NULL);
  pthread_exit(0);
}
int main(int argc, const char *argv[])
{
  pthread_t threadid;
  ThreadInfo info;
  info.value = 8;
  pthread_create(&threadid, NULL, ChildWork, (void*)&info);
  pthread_join(threadid, NULL);
  return 0;
}
ThreadInfo* child = new ThreadInfo; 
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);

&儿童是ThreadInfo**,但子线将其投射到ThreadInfo*并读取垃圾。将(void*)&child更改为child