#include #include static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cv = PTHREAD_COND_INITIALIZER; static int finished = 0; static void *child_thread(void *arg) { (void)arg; (void)arg; printf("child running\n"); pthread_mutex_lock(&mtx); finished = 1; pthread_cond_signal(&cv); pthread_mutex_unlock(&mtx); return NULL; } int main(void) { printf("parent starting\n"); pthread_t tid; pthread_create(&tid, NULL, child_thread, NULL); pthread_mutex_lock(&mtx); while (finished == 0) { pthread_cond_wait(&cv, &mtx); } pthread_mutex_unlock(&mtx); printf("parent finishing\n"); pthread_join(tid, NULL); return 0; }