5个基本线程函数
pthread_create函数
当一个程序启动时,这个时候主线程也叫初始线程就建立了。其他线程则有pthread_create函数建立。
#include <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *),void *arg); 返回:若成功则为0,若出错则为正的Exxx值
每一个线程都有一个线程id(thread ID)标识,若是新的线程建立成功,其ID就经过tid指针返回。
而后咱们来看下最后一个参数,这个是线程执行的函数和参数,该线程经过调用这个函数开始执行,而后或者显式的终止(经过调用pthread_exit),或者隐式的终止(经过让该函数返回)。该函数的地址由func参数指定,该函数的惟一调用参数是指针arg。若是咱们须要传递多个参数,咱们就要把他们打包成一个结构,传给这个参数。
pthread_join函数
能够经过调用pthread_join函数等待一个给定线程终止.
#include <pthread.h>
int pthread_join(pthread_t *tid,void **status); 返回:若成功则为0,若出错则为正的Exxx值
第一个参数tid就是须要等待的那个线程id,status这个参数若是非空,那么来自所等待线程的返回值将存入由status指向的位置。
也就是说经过调用这个函数,咱们能够获取到该线程退出的状态的数据,固然这个线程的状态必须是可汇合的(joinable,默认值)
什么意思呢?就是说若是某个线程的状态是可汇合的(joinable),那么别的线程就能够经过pthread_join获取到该线程的退出状态和线程id,若是设置为脱离的(detached),那么当该线程终止时,全部相关资源所有释放,咱们不能等待他们终止。
pthread_self函数
每一个线程都有一个在所属进程内标识自身的ID,线程ID由pthread_create返回,咱们在上面那个函数中也用到了,每一个线程可使用pthread_self获取自身的线程ID。
#include <pthread.h> pthread_t pthread_self(void); 返回:调用线程的线程ID
pthread_detach函数
在说pthread_join函数的时候咱们提到过线程的状态,一种是可汇合的(joinable,默认值),一种是脱离的(detached),这个函数的做用就是把某个线程的状态变为脱离的(detached)。
#include <pthread.h>
int pthread_detach(pthread_t tid); 返回:若成功则为0,若出错则为正的Exxx值
本函数经过由想让本身脱离的线程调用,就如如下语句,
pthread_detach(pthread_self());
pthread_exit函数
让一个线程终止的方法之一是调用pthread_exit。
#include <pthread.h>
void pthread_exit(void *status); 不返回到调用者
若是本线程不曾脱离,它的线程ID和退出状态将一直留存到调用进程内的某个其余线程对它调用pthread_join。