Как не блокировать главный поток после 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 шт):
pthread_join ждет завершения потока. Поэтому, вначале завершится поток threading_foo, а потом только create_threads. И выведет "\nthreadedMain".
pthread_join перпендикуляре js'ому setTimeout
Как не блокировать главный поток после pthread_join?
блокирует именно вызов pthread_join. Не хотите блокировать - не вызывайте сразу, а позже. В си нужно следить за ресурсами аккуратно, здесь нет уборщика мусора.