pthread.h中的函数

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

猜你喜欢

转载自blog.csdn.net/qq_55796594/article/details/129898975