参考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函数时的前后处理,通常用来控制互斥锁的继承 |