本文只是针对 POSIX 线程库功能接口与知识点的汇总罗列
库 : /lib64/libpthread.so*
头文件 : pthread.h
线程属性设置:
1.线程属性结构 pthread_attr_t
线程大多属性都可通过该结构体设置, 在创建线程时通过 pthread_create的第二个参数使其
生效。其定义如下
/usr/include/bits/pthreadtypes.h : typedef union pthread_attr_t pthread_attr_t;
/*------------------------------------------------------------*/
# ifdef __x86_64__
# if __WORDSIZE == 64
# define __SIZEOF_PTHREAD_ATTR_T 56
# else
# define __SIZEOF_PTHREAD_ATTR_T 32
# endif
# else
# define __SIZEOF_PTHREAD_ATTR_T 36
# endif
union pthread_attr_t
{
char __size[__SIZEOF_PTHREAD_ATTR_T];
long int __align;
};
/*------------------------------------------------------------*/
2.初始化/销毁 线程属性结构体
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
3.设置/获取 线程分离属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
线程分离属性值仅有 2 个可选项
PTHREAD_CREATE_DETACHED 分离
PTHREAD_CREATE_JOINABLE 未分离
4.设置/获取 线程栈信息
int pthread_attr_setstack(pthread_attr_t *attr,
void *stackaddr, size_t stacksize);
int pthread_attr_getstack(pthread_attr_t *attr,
void **stackaddr, size_t *stacksize);
若指定栈空间,栈大小必须不小于 PTHREAD_STACK_MIN
5.设置/获取 栈警戒区大小
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);
防止栈溢出而设置的警戒区,应大于 0
6.设置取消状态
int pthread_setcancelstate(int state, int *oldstate);
取消状态有 2 个可选项
PTHREAD_CANCEL_ENABLE 可取消
PTHREAD_CANCEL_DISABLE 不可取消
7.设置取消类型
int pthread_setcanceltype(int type, int *oldtype);
取消类型有 2 个可选项
PTHREAD_CANCEL_DEFERRED 取消响应在下次取消点到达时
PTHREAD_CANCEL_ASYNCHRONOUS 取消响应为任意时刻点