| 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; | |
| } | |