pthread_exit() — Exit a thread
Standards
Standards / Extensions | C or C++ | Dependencies |
---|---|---|
POSIX.4a |
both | POSIX(ON) |
Format
#define _OPEN_THREADS
#include <pthread.h>
void pthread_exit(void *status);
General description
Ends the calling thread and makes status available to any thread that calls pthread_join() with the ending thread's thread ID.
As part of pthread_exit() processing, cleanup and destructor
routines may be run:
- For details on the cleanup routines, refer to pthread_cleanup_pop() — Remove a cleanup handler and pthread_cleanup_push() — Establish a cleanup handler.
- For details on the destructor routine, refer to pthread_key_create() — Create thread-specific data key.
Special behavior for C++: Destructors for automatic objects on the stack will be run when a thread is canceled. The stack is unwound and the destructors are run in reverse order.
Returned value
pthread_exit() cannot return to its caller.
There are no documented errno values. Use perror() or strerror() to determine the cause of the error.
Example
CELEBP30
/* CELEBP30 */
#define _OPEN_THREADS
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
void *thread(void *arg) {
char *ret;
if ((ret = (char*) malloc(20)) == NULL) {
perror("malloc() error");
exit(2);
}
strcpy(ret, "This is a test");
pthread_exit(ret);
}
main() {
pthread_t thid;
void *ret;
if (pthread_create(&thid, NULL, thread, NULL) != 0) {
perror("pthread_create() error");
exit(1);
}
if (pthread_join(thid, &ret) != 0) {
perror("pthread_create() error");
exit(3);
}
printf("thread exited with '%s'\n", ret);
}
Output:
thread exited with 'This is a test'