pthread(POSIX threads)库包含了超过100个API,通常可按功能分为线程管理、同步机制、线程特定数据、属性对象等几大类。下面是主要API的分类及功能简介。
一、线程管理 (Thread Management)
线程的创建、终止、连接、分离及控制。
| 函数 | 功能描述 |
|---|---|
pthread_create() |
创建一个新线程 |
pthread_exit() |
终止调用线程 |
pthread_join() |
等待指定线程终止 |
pthread_detach() |
将线程设为分离状态,使其结束时自动回收资源 |
pthread_self() |
获取调用线程的ID |
pthread_equal() |
比较两个线程ID是否相等 |
pthread_cancel() |
向指定线程发送取消请求 |
pthread_setcancelstate() |
设置当前线程的取消状态(启用/禁用) |
pthread_setcanceltype() |
设置当前线程的取消类型(延迟/异步) |
pthread_testcancel() |
在当前线程中创建一个取消点 |
pthread_once() |
确保初始化函数在程序生命周期内只执行一次 |
pthread_yield() |
让出CPU,允许调度器运行其他线程 |
二、互斥锁 (Mutex)
提供互斥访问,保护临界区,确保同一时刻只有一个线程进入。
| 函数 | 功能描述 |
|---|---|
pthread_mutex_init() |
初始化互斥锁 |
pthread_mutex_destroy() |
销毁互斥锁 |
pthread_mutex_lock() |
加锁(阻塞) |
pthread_mutex_trylock() |
尝试加锁(非阻塞) |
pthread_mutex_unlock() |
解锁 |
pthread_mutex_consistent() |
将处于不一致状态的强壮互斥锁恢复为一致状态 |
三、条件变量 (Condition Variable)
允许线程在特定条件不满足时等待 ,并在条件满足时被唤醒,通常与互斥锁配合使用。
| 函数 | 功能描述 |
|---|---|
pthread_cond_init() |
初始化条件变量 |
pthread_cond_destroy() |
销毁条件变量 |
pthread_cond_wait() |
等待条件变量(阻塞) |
pthread_cond_timedwait() |
限时等待条件变量 |
pthread_cond_signal() |
唤醒一个等待线程 |
pthread_cond_broadcast() |
唤醒所有等待线程 |
四、读写锁 (Read-Write Lock)
允许多个线程同时读取 ,但写入时独占访问,适用于读多写少的场景。
| 函数 | 功能描述 |
|---|---|
pthread_rwlock_init() |
初始化读写锁 |
pthread_rwlock_destroy() |
销毁读写锁 |
pthread_rwlock_rdlock() |
加读锁(阻塞) |
pthread_rwlock_wrlock() |
加写锁(阻塞) |
pthread_rwlock_unlock() |
解锁 |
pthread_rwlock_tryrdlock() |
尝试加读锁(非阻塞) |
pthread_rwlock_trywrlock() |
尝试加写锁(非阻塞) |
五、屏障 (Barrier)
同步一组线程,让它们共同等待,直到所有线程都到达屏障点后才一起继续。
| 函数 | 功能描述 |
|---|---|
pthread_barrier_init() |
初始化屏障 |
pthread_barrier_destroy() |
销毁屏障 |
pthread_barrier_wait() |
在屏障处等待 |
六、自旋锁 (Spinlock)
在无法获取锁时忙等待(Busy-Wait),适用于锁持有时间极短的场景。
| 函数 | 功能描述 |
|---|---|
pthread_spin_init() |
初始化自旋锁 |
pthread_spin_destroy() |
销毁自旋锁 |
pthread_spin_lock() |
加锁(忙等待) |
pthread_spin_trylock() |
尝试加锁(非阻塞) |
pthread_spin_unlock() |
解锁 |
七、 线程特定数据 (Thread-Specific Data)
为每个线程提供独立的全局变量(即线程局部存储)。
| 函数 | 功能描述 |
|---|---|
pthread_key_create() |
创建一个线程特定数据键 |
pthread_key_delete() |
删除一个线程特定数据键 |
pthread_setspecific() |
设置当前线程的特定数据值 |
pthread_getspecific() |
获取当前线程的特定数据值 |
八、清理处理程序 (Cleanup Handlers)
在线程被取消或退出时,自动执行清理操作(如释放资源)。
| 函数 | 功能描述 |
|---|---|
pthread_cleanup_push() |
压入一个清理处理程序 |
pthread_cleanup_pop() |
弹出并执行(或不执行)清理处理程序 |
九、 属性对象 (Attribute Objects)
用于在创建对象前设置其行为属性(如分离状态、栈大小、调度策略等)。
| 类别 | 相关函数 |
|---|---|
| 线程属性 | pthread_attr_init()、pthread_attr_destroy()、pthread_attr_setdetachstate()、pthread_attr_getdetachstate()、pthread_attr_setstacksize()、pthread_attr_getstacksize()、pthread_attr_setstack()、pthread_attr_getstack()、pthread_attr_setguardsize()、pthread_attr_getguardsize() |
| 互斥锁属性 | pthread_mutexattr_init()、pthread_mutexattr_destroy()、pthread_mutexattr_settype()、pthread_mutexattr_gettype()、pthread_mutexattr_setpshared()、pthread_mutexattr_getpshared() |
| 条件变量属性 | pthread_condattr_init()、pthread_condattr_destroy()、pthread_condattr_setpshared()、pthread_condattr_getpshared() |
| 读写锁属性 | pthread_rwlockattr_init()、pthread_rwlockattr_destroy()、pthread_rwlockattr_setpshared()、pthread_rwlockattr_getpshared() |
| 屏障属性 | pthread_barrierattr_init()、pthread_barrierattr_destroy()、pthread_barrierattr_setpshared()、pthread_barrierattr_getpshared() |
十、信号与调度 (Signals & Scheduling)
控制线程的信号处理和调度行为。
| 函数 | 功能描述 |
|---|---|
pthread_kill() |
向指定线程发送信号 |
pthread_sigmask() |
设置当前线程的信号掩码 |
pthread_sigqueue() |
向线程发送带数据的信号 |
pthread_attr_setschedpolicy() |
设置线程的调度策略 |
pthread_attr_getschedpolicy() |
获取线程的调度策略 |
pthread_attr_setschedparam() |
设置线程的调度参数 |
pthread_attr_getschedparam() |
获取线程的调度参数 |
十一、命名规范速查
pthread库中的所有标识符都以 pthread_ 开头,不同功能模块拥有不同的前缀,便于识别:
| 功能模块 | 前缀 |
|---|---|
| 线程管理 | pthread_ |
| 互斥锁 | pthread_mutex_ |
| 条件变量 | pthread_cond_ |
| 读写锁 | pthread_rwlock_ |
| 屏障 | pthread_barrier_ |
| 自旋锁 | pthread_spin_ |
| 线程特定数据 | pthread_key_ / pthread_getspecific |
| 属性对象 | pthread_attr_ / *_attr_ |
编译链接 :使用pthread库时,需要包含头文件
#include <pthread.h>,并在编译时链接线程库:gcc -pthread file.c。
以上是pthread库的主要API分类及功能概述,涵盖了线程管理、各类同步机制、线程局部存储、属性配置等核心方面,可以满足多线程编程的大部分需求。