1. 创建线程与退出线程
int pthread_create(pthread_t * thread, const pthread_attr_t *attr, void *(*start)(void*), void *arg )
返回值:成功 0, 失败 -1,
Thread_create 函数用于创建线程,参数thread用于保存线程的线程变量。attr参数为要设置的线程属性。start参数用于指向线程执行调用的函数。参数arg为线程要执行函数的调用参数。
void pthread_exit(void *value_ptr)
返回值:成功 0,失败非0,
pthread_exit函数用于结束线程的运行,参数value_ptr设置线程退出的返回值。由于value_ptr为指向内存空间的指针。
2. 基本线程的管理
int pthread_join(pthread_t thread, void **value_ptr)
返回值:成功 0,失败非0,
Pthread_join函数将挂起调用该函数的线程,直到thread参数指定的线程运行结束,当函数返回时,被等待的线程的资源被收回。
3. 线程属性
1.1. 初始化线程属性
int pthread_attr_init(pthread_attr_t *attr)
返回值:成功 0,失败非0
Pthread_attr_init函数用于使用参数attr中的属性来初始化线程对象,该函数必须在pthread_create函数之前调用。
Pthread_attr_t结构体定义如下:
Typedef struct
{
Int _detachstate; //线程的分离状态
Int _schedpolicy; //线程分离状态
Struct sched_param _schedparam; // 线程的调度参数
Int _inheritcched; //线程的继承性
Int _scope; //线程作用域
Int t_guardsize;
Int _stackaddr_set;
Void * _stackaddr; //线程堆栈位置
Unsigned long int _stacksize; //线程堆栈大小
} pthread_attr_t;
1.2. 设置和获得线程分离状态
Int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
返回值:成功 0,失败非0,
Pthread_attr_setdetachstate用于设置线程属性对象的线程分离状态。Attr为指向要设置的线程属性对象的指针,detachstate参数可取PTHREAD_CREATE_DETACHED(分离线程)和PTHREAD_CREATE_JOINABLE(非分离线程)
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int * detachstate)
返回值:成功 0,失败非0,
pthread_attr_getdetachstate函数将从attr参数获得线程分离状态,并将结果保存在detachstate指针所指向的内存空间中,
1.3. 设置于获取线程属性对象的作用域
Int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope)
返回值:成功 0,失败非0
Pthread_attr_setscope函数中,attr参数为指向要设置的线程属性对象的指针。Contentionscope参数为作用域取值。该参数可以去PTHREAD_SCOPE_SYSTEM,表明线程是在系统调度竞争资源。而PTHREAD_SCOPE_PROCESS表示线程是在同一进程内,是在线程间调度竞争资源。
Int pthread_attr_getscope(const pthread_attr_t *attr, int * contentionscope)
返回值:成功 0,失败非0,
Pthread_attr_getscope函数将从attr参数中获得线程的作用域信息,并将结果保存在contentionscope指针所指向的内存空间。
1.4. 设置和获得线程属性对象的继承性
Int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched)
返回值:成功 0,失败非0.
pthread_attr_setinheritsched函数中,attr参数为指向要设置的线程属性对象的指针。Inheritsched参数为继承性取值情况,该参数的取值情况:
PTHREAD_INHETIT_SCHED:新产生的线程继承创建线程的调度属性。
PTHREAD_EXPLICIT_SCHED:从线程属性对象中设置调度属性。
Int pthread_attr_getinheritsched(pthread_attr_t *attr , int *policy)
返回值:成功 0,失败非0,
pthread_attr_getinheritsched函数将从attr参数中获取继承性信息,并将结果保存在policy指针所指向的内存空间。
1.5. 设置和获得线程属性对象的调度策略
Int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy)
返回值:成功 0,失败非0,
pthread_attr_setschedpolicy函数attr参数为指向要设置的线程属性对象的指针,policy参数为要设置的调度策略,可以取SCHED_FIFO(先进先出),SCHED_RR(轮转法),SCHED_OYHER(未定义的调度策略)。
Int pthread_attr_getschedpolicy(const pthread_attr_t *attr , int *policy)
pthread_attr_getschedpolicy函数将从attr参数中获取线程调度策略信息,并将结果保存在policy指针所指向的内存空间。
1.6. 设置和获得线程属性对象的调度参数
Int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param * param)
返回值:成功 0,失败非0,
pthread_attr_setschedpolicy函数attr参数为指向要设置的线程属性对象的指针,param参数为指向sched_param结构体的指针。
Int pthread_attr_getschedparam(const pthread_attr_t *attr , struct sched_param * param)
pthread_attr_getschedpolicy函数将从attr参数中获取线程调度策略信息,并将结果保存在param指针所指向sched_param类型的结构体中。