用线程递归传递数据

时间:2014-02-01 01:12:22

标签: c++ c multithreading recursion

我试图用线程递归传递值。

在我的例子中,我正在创建一个线程并且我传递了一些数据,并且这个线程以递归方式创建另一个线程,这也传递了一些数据。

输出如下:

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

为什么我没有为第二个线程获取值4,即使我为它指定了值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 = %d\n", 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;
}

1 个答案:

答案 0 :(得分:2)

ThreadInfo* child = new ThreadInfo; 
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);

& child是ThreadInfo**,但子线程将其强制转换为ThreadInfo*并读取垃圾。将(void*)&child更改为child