Передача данных рекурсивно с потоками

0

Я пытаюсь передать значения рекурсивно с потоками.

В моем примере я создаю поток, и я передаю ему некоторые данные, и этот поток рекурсивно создает другой поток, который также передает ему некоторые данные.

Вывод следующий:

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;
}
  • 0
    Расовые условия при доступе к count , скорее всего, появятся!
Теги:
multithreading
recursion

1 ответ

2
Лучший ответ
ThreadInfo* child = new ThreadInfo; 
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);

& child - ThreadInfo** но дочерний поток ThreadInfo* его в ThreadInfo* и считывает мусор. Измените (void*)&child на просто child.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню