#include #include #include #include #include "prtastr.h" #define BUFFSIZE 1024 static pthread_mutex_t join_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t join_cond = PTHREAD_COND_INITIALIZER; static int delay = 0; void *join_thread_main(void *arg){ char buff[BUFFSIZE]; sprintf(buff,"I'm the spawned thread chug chug chugging along\n"); prtastr(buff, STDERR_FILENO, delay); pthread_mutex_lock(&join_mutex); pthread_cond_signal(&join_cond); pthread_mutex_unlock(&join_mutex); pthread_exit(NULL); } int main(int argc, char *argv[]){ pthread_t join_thread; if((argc != 2) || ((delay = atoi(argv[1])) < 0)) { fprintf (stderr, "Usage: %s delay\n", argv[0]); exit(EXIT_FAILURE); } fprintf(stderr, "main thread spawning thread\n"); pthread_mutex_lock(&join_mutex); pthread_create(&join_thread,NULL,join_thread_main,NULL); fprintf(stderr, "main thread waiting\n"); pthread_cond_wait(&join_cond, &join_mutex); fprintf(stderr, "main thread awoken\n"); pthread_mutex_unlock(&join_mutex); exit(EXIT_SUCCESS); }