参考pthrad.h中的函数以及man手册,列举了pthread库中的工具函数并做了分类。pthread库中的重点当然是thread、mutex和condition。此外,pthread提供了读写锁、自旋锁的实现,以及控制多线程启动的pthread_barrier和线程全局变量(thread_local)的实现。帮助我们快速开发多线程的访问控制。
1.线程
1.1线程创建和销毁
函数 | 功能 |
---|
pthread_create | 创建一个线程 |
pthread_exit | 退出线程 |
pthread_join | 将线程设为join模式 |
pthread_tryjoin_np | 检测join线程是否结束 |
pthread_timedjoin_np | 检测join线程是否结束 |
pthread_clockjoin_np | 在超时时间内join |
pthread_detach | 将线程设为detach模式 |
pthread_self | 返回线程id |
pthread_equal | 比较两个线程 |
1.2线程属性
这些函数操作pthread_attr_t对象
typedef struct
{
int detachstate; 线程的分离状态
int schedpolicy; 线程调度策略(包括先进先出、时间片等)
struct sched_param schedparam; 线程的调度参数(优先级)
int inheritsched; 线程的继承性(优先级和策略的继承)
int scope; 线程的作用域(进程内或系统级范围竞争资源)
size_t guardsize; 线程栈末尾的警戒缓冲区大小
int stackaddr_set;
void * stackaddr; 线程栈的位置
size_t stacksize; 线程栈的大小
}pthread_attr_t;
函数 | 功能 |
---|
pthread_attr_init | 初始化线程属性pthread_attr_t |
pthread_attr_destroy | 销毁线程属性pthread_attr_t |
pthread_attr_getdetachstate | 获得pthread_attr_t对象的detach属性 |
pthread_attr_setdetachstate | 设置pthread_attr_t对象的detach属性 |
pthread_attr_getguardsize | 得到线程栈末尾的警戒缓冲区大小 |
pthread_attr_setguardsize | 设置线程栈末尾的警戒缓冲区大小 |
pthread_attr_getschedparam | 获得线程的schedparam调度参数(本质就是调度优先级) |
pthread_attr_setschedparam | 设置线程的schedparam调度参数(本质就是调度优先级) |
pthread_attr_getschedpolicy | 获得线程的调度策略 |
pthread_attr_setschedpolicy | 设置线程的调度策略 |
pthread_attr_getinheritsched | 获得线程的继承性 |
pthread_attr_setinheritsched | 设置线程的继承性 |
pthread_attr_getscope | 获得线程的作用域 |
pthread_attr_setscope | 设置线程的作用域 |
pthread_attr_getstackaddr | 获得线程栈的地址 |
pthread_attr_setstackaddr | 设置线程栈的地址 |
pthread_attr_getstacksize | 获得线程栈的大小 |
pthread_attr_setstacksize | 设置线程栈的大小 |
pthread_attr_getstack | 获得线程栈的地址和大小 |
pthread_attr_setstack | 设置线程栈的地址和大小 |
pthread_attr_setaffinity_np | 设置线程属性为仅在某些CPU上运行 |
pthread_attr_getaffinity_np | 获得线程属性被设置在哪些CPU上运行 |
pthread_getattr_default_np | 获得默认的属性 |
pthread_setattr_default_np | 设置默认的属性 |
pthread_attr_setsigmask_np | 设置signal mask属性 |
pthread_attr_getsigmask_np | 获得signal mask属性 |
pthread_getattr_np | 使用正在运行的线程初始化一个属性对象 |
1.3调度控制
这些函数操作线程对象
函数 | 功能 |
---|
pthread_setschedparam | 设置线程的调度参数(优先级) |
pthread_getschedparam | 设置线程的调度参数(优先级) |
pthread_setschedprio | 设置线程的优先级 |
pthread_getname_np | 获得线程名称 |
pthread_setname_np | 设置线程名称 |
pthread_getconcurrency | 获得并发级别 |
pthread_setconcurrency | 设置并发级别 |
pthread_yield / sched_yield | 让出CPU并将该线程挂到队列末尾 |
pthread_setaffinity_np | 设置该线程运行的CPU集合 |
pthread_getaffinity_np | 获得该线程运行的CPU集合 |
pthread_once | 确保线程仅被执行一次 |
pthread_setcancelstate | 设置本线程对cancel信号的反应 |
pthread_setcanceltype | 设置线程取消类型(立即取消、下一次取消) |
pthread_cancel | 取消线程 |
pthread_testcancel | 设置取消点 |
1.4宏
函数 | 功能 |
---|
pthread_cleanup_push | 线程取消时,清理资源 |
pthread_cleanup_pop | 和pthread_cleanup_push成对使用 |
pthread_cleanup_push_defer_np | 保存cancelability type时push清理处理程序 |
pthread_cleanup_pop_restore_np | 保存cancelability type时pop清理处理程序 |
2.互斥量
函数 | 功能 |
---|
pthread_mutex_init | 初始化互斥量 |
pthread_mutex_destroy | 销毁互斥量 |
pthread_mutex_trylock | 尝试加锁互斥量 |
pthread_mutex_lock | 互斥量加锁 |
pthread_mutex_timedlock | 限时加锁 |
pthread_mutex_clocklock | 限时加锁 |
pthread_mutex_unlock | 互斥量解锁 |
pthread_mutex_getprioceiling | 获得互斥锁的优先级上限 |
pthread_mutex_setprioceiling | 设置互斥锁的优先级上限 |
pthread_mutex_consistent | 恢复锁的一致性 |
2.1互斥量属性
函数 | 功能 |
---|
pthread_mutexattr_init | 初始化互斥量属性 |
pthread_mutexattr_destroy | 销毁互斥量属性 |
pthread_mutexattr_getpshared | 获得互斥量共享属性(进程内共享、进程间共享) |
pthread_mutexattr_setpshared | 设置互斥量共享属性(进程内共享、进程间共享) |
pthread_mutexattr_gettype | 获得一个互斥锁属性类型 |
pthread_mutexattr_settype | 设置一个互斥锁属性类型 |
pthread_mutexattr_getprotocol | 获取互斥锁属性的协议 |
pthread_mutexattr_setprotocol | 设置互斥锁属性的协议 |
pthread_mutexattr_getprioceiling | 获得互斥锁属性的优先级上限 |
pthread_mutexattr_setprioceiling | 设置互斥锁属性的优先级上限 |
pthread_mutexattr_getrobust | 获得互斥锁的健壮属性 |
pthread_mutexattr_setrobust | 设置互斥锁的健壮属性 |
2.2读写锁
函数 | 功能 |
---|
pthread_rwlock_init | 读写锁初始化 |
pthread_rwlock_destroy | 读写锁销毁 |
pthread_rwlock_rdlock | 读写锁读锁定 |
pthread_rwlock_tryrdlock | 读写锁尝试读锁定 |
pthread_rwlock_timedrdlock | 读写锁限时读锁定 |
pthread_rwlock_clockrdlock | 读写锁限时读锁定 |
pthread_rwlock_wrlock | 读写锁写锁定 |
pthread_rwlock_trywrlock | 读写锁尝试写锁定 |
pthread_rwlock_timedwrlock | 读写锁限时锁协定 |
pthread_rwlock_clockwrlock | 读写锁限时锁协定 |
pthread_rwlock_unlock | 读写锁解锁 |
2.2读写锁的属性
函数 | 功能 |
---|
pthread_rwlockattr_init | 读写锁属性初始化 |
pthread_rwlockattr_destroy | 读写锁属性销毁 |
pthread_rwlockattr_getpshared | 获得读写锁的共享属性(进程内、进程间) |
pthread_rwlockattr_setpshared | 设置读写锁的共享属性(进程内、进程间) |
pthread_rwlockattr_getkind_np | 获得读写锁的类型(写优先还是读优先) |
pthread_rwlockattr_setkind_np | 设置读写锁的类型(写优先还是读优先) |
2.3自旋锁
函数 | 功能 |
---|
pthread_spin_init | 自旋锁初始化 |
pthread_spin_destroy | 自旋锁销毁 |
pthread_spin_lock | 自旋锁加锁 |
pthread_spin_trylock | 自旋锁尝试加锁 |
pthread_spin_unlock | 自旋锁解锁 |
3.条件变量
函数 | 功能 |
---|
pthread_cond_init | 条件变量初始化 |
pthread_cond_destroy | 条件变量销毁 |
pthread_cond_signal | 唤醒一个等待条件变量的线程 |
pthread_cond_broadcast | 广播唤醒等待条件变量的线程 |
pthread_cond_wait | 等待条件变量的唤醒 |
pthread_cond_timedwait | 限时等待条件变量的唤醒 |
pthread_cond_clockwait | 限时等待条件变量的唤醒 |
3.1条件变量的属性
函数 | 功能 |
---|
pthread_condattr_init | 条件变量属性初始化 |
pthread_condattr_destroy | 条件变量属性销毁 |
pthread_condattr_getpshared | 获得条件变量共享属性 |
pthread_condattr_setpshared | 设置条件变量共享属性 |
pthread_condattr_getclock | 获得条件变量的时钟属性 |
pthread_condattr_setclock | 设置条件变量的时钟属性 |
4.线程barrier
函数 | 功能 |
---|
pthread_barrier_init | 初始化线程barrier,并设置线程数n |
pthread_barrier_destroy | 销毁线程barrier |
pthread_barrier_wait | 每个线程在wait前暂定等待,直到等待数等于n,才开始执行 |
pthread_barrierattr_init | 初始化线程barrier的属性 |
pthread_barrierattr_destroy | 销毁线程barrier的属性 |
pthread_barrierattr_getpshared | 获得线程barrier的共享属性 |
pthread_barrierattr_setpshared | 设置线程barrier的共享属性 |
5.线程私有数据
key为线程全局变量,类似于thread_local关键字,虽然每个线程都通过可以访问key,但实际上key在线程中指向的内容是线程独立的。即,线程私有数据采用了一键多值的技术,即一个键对应多个值。访问数据时都是通过键值来访问,好像是对一个变量进行访问,其实是在访问不同的数据。
函数 | 功能 |
---|
pthread_key_create | 创建一个key |
pthread_key_delete | 删除一个key |
pthread_getspecific | 从key中读出线程私有数据 |
pthread_setspecific | 设置key的线程私有数据 |
6.cpu和fork
函数 | 功能 |
---|
pthread_getcpuclockid | 获得线程CPU时钟的ID |
pthread_atfork | 规定多进程调用fork函数时的前后处理,通常用来控制互斥锁的继承 |