Как не блокировать главный поток после pthread_join?

Есть код:

#include <pthread.h>
#include <unistd.h>

void threading_foo( void * threaded_data ) {
  sleep(5);
  printf("\nthreaded");
  pthread_exit(0);
}

void create_threads() {
  void * thread_data = NULL;
  pthread_t thread;
  pthread_create(&thread, NULL, threading_foo, thread_data);
  pthread_join(thread, NULL);
  printf("MAIN");
}

int main() {
  void * thread_data = NULL;
  pthread_t thread;
  pthread_create(&thread, NULL, create_threads, thread_data);
  pthread_join(thread, NULL);
  return 0;
}

Я новенький в pthread. И ожидал поведения как в JS при вызове setTimeout, к примеру. То есть, сначала выводится надпись "MAIN", а затем после 5 секунд -- надпись "threaded".

Но, как я понял, поток блокируется до тех пор, пока не завершится дочерний. Вопрос: как реализовать поведение setTimeout с помощью pthread?


Ответы (1 шт):

Автор решения: KoVadim

pthread_join ждет завершения потока. Поэтому, вначале завершится поток threading_foo, а потом только create_threads. И выведет "\nthreadedMain".

pthread_join перпендикуляре js'ому setTimeout

Как не блокировать главный поток после pthread_join?

блокирует именно вызов pthread_join. Не хотите блокировать - не вызывайте сразу, а позже. В си нужно следить за ресурсами аккуратно, здесь нет уборщика мусора.

→ Ссылка