pthread.h中的函数

文章详细列举了pthread库中的线程创建、销毁、调度控制、互斥量、读写锁、条件变量、线程屏障和线程私有数据等关键函数,这些工具用于构建和管理多线程应用程序,确保资源的安全访问和同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值