/* This is a test of the special shutdown that occurs when all threads, including the main one, call pthread_exit(). It demonstrates that atexit handlers are properly called, and that the output is properly flushed even when stdout is redirected to a file, and therefore fully buffered. */ #include #include #include #define NTHREADS 20 /* number of threads */ static void *thread(void *arg) { printf("thread terminating\n"); return 0; } void cleanup(void) { printf("atexit handler called\n"); } int main(void) { int i; atexit(cleanup); for (i = 0; i < NTHREADS; i++) { pthread_t id; if (pthread_create(&id, 0, thread, 0) != 0) { fprintf(stderr, "pthread_create failed\n"); abort(); } } pthread_exit(0); }