#include #include #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond = PTHREAD_COND_INITIALIZER; bool should_exit; pthread_t thread; void *workerThread(void* arg) { pthread_mutex_lock(&mutex); while (!should_exit) pthread_cond_wait(&cond, &mutex); pthread_mutex_unlock(&mutex); return NULL; } void terminateThread() { pthread_mutex_lock(&mutex); should_exit = true; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); int res = 0; int rc = pthread_join(thread, (void**)&res); assert(rc == 0); assert(res == 0); printf("done waiting - thread successfully terminated\n"); } int main(int argc, char* argv[]) { int rc = atexit(terminateThread); assert(rc == 0); rc = pthread_create(&thread, NULL, workerThread, NULL); assert(rc == 0); return 0; }