int Pthread_create (pthread_t *thread, const pthread_attr_t *attr,
void * (*start_routine) (void *), void *arg);
void Pthread_exit (void *retval);
1. Set Thread Properties
If the Attr property is set to NULL when the thread is created, the thread takes the default property joinable. You need to set the property to detached
int Pthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate);
int Pthread_attr_getdetachstate (pthread_attr_t *attr, int *detachstate);
pthread_t thread_id;
pthread_attr_t attr;
Pthread_attr_init (&attr);
Pthread_attr_setdetachstate (&attr, pthread_create_detached);
Pthread_create (&thread_id, &attr, Func, NULL);
Pthread_attr_destroy (&ATTR);
2. Pthread_join
Block wait thread exit and cleanup (similar to waiting, Waitpid)
int Pthread_join (pthread_t thread, void **retval);
Pthread_join (thread, (void**) &thread_ret); The parent thread invokes
printf ("Thread_ret =%d.\n", *thread_ret);
3. Pthread_detach Non-blocking
int Pthread_detach (pthread_t thread);
Pthread_detach (Pthread_self ()); Child thread Call