我试图用线程递归传递值。
在我的例子中,我正在创建一个线程并且我传递了一些数据,并且这个线程以递归方式创建另一个线程,这也传递了一些数据。
输出如下:
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;
}
答案 0 :(得分:2)
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
& child是ThreadInfo**
,但子线程将其强制转换为ThreadInfo*
并读取垃圾。将(void*)&child
更改为child
。