Я пытаюсь передать значения рекурсивно с потоками.
В моем примере я создаю поток, и я передаю ему некоторые данные, и этот поток рекурсивно создает другой поток, который также передает ему некоторые данные.
Вывод следующий:
Thread 1: value = 8
Thread 2: value = 12318230
Почему я не получаю значение 4 для второго потока, хотя я присвоил ему значение 4?
Из моего понимания (пожалуйста, поправьте меня, если я ошибаюсь), каждый поток имеет свой собственный стек. Когда я передаю значение 4 в Thread 2 (поток, созданный первым потоком), переменная находится в памяти до тех пор, пока поток не закончится. Поскольку у меня есть вызов pthread_join, я жду, пока дочерний поток не закончится, пока я не вернусь. Я не знаю, почему значение Thread 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;
}
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
& child - ThreadInfo**
но дочерний поток ThreadInfo*
его в ThreadInfo*
и считывает мусор. Измените (void*)&child
на просто child
.
count
, скорее всего, появятся!