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分类及功能概述,涵盖了线程管理、各类同步机制、线程局部存储、属性配置等核心方面,可以满足多线程编程的大部分需求。
627

被折叠的 条评论
为什么被折叠?



