Documentation Home
> 多线程编程指南
多线程编程指南
Book Information
索引
数字和符号
A
C
D
E
F
G
I
K
L
M
N
P
R
S
T
U
V
W
X
安
绑
报
比
编
变
标
并
不
查
超
程
初
创
磁
从
粗
存
代
单
调
定
读
断
多
二
访
分
高
更
公
工
共
固
红
互
恢
获
寄
继
计
监
检
键
交
静
局
可
空
库
宽
连
临
密
内
瓶
剖
强
轻
全
设
生
实
使
事
守
数
顺
死
算
锁
体
替
条
同
完
未
系
细
线
限
陷
向
销
信
循
以
异
应
用
优
原
远
暂
栈
争
中
自
前言
第 1 章 多线程基础介绍
定义多线程术语
符合多线程标准
多线程的益处
提高应用程序的响应
有效使用多处理器
改进程序结构
占用较少的系统资源
结合线程和 RPC(远程过程调用)
多线程概念
并发性和并行性
多线程结构一览
用户级线程
用户级线程状态
线程调度
线程取消
线程同步
使用 64 位体系结构
第 2 章 基本线程编程
线程库
创建缺省线程
pthread_create 语法
pthread_create 返回值
等待线程终止
pthread_join 语法
pthread_join 返回值
简单线程的示例
分离线程
pthread_detach 语法
pthread_detach 返回值
为线程特定数据创建键
pthread_key_create 语法
pthread_key_create 返回值
删除线程特定数据键
pthread_key_delete 语法
pthread_key_delete 返回值
设置线程特定数据
pthread_setspecific 语法
pthread_setspecific 返回值
获取线程特定数据
pthread_getspecific 语法
pthread_getspecific 返回值
全局和专用线程特定数据的示例
获取线程标识符
pthread_self 语法
pthread_self 返回值
比较线程 ID
pthread_equal 语法
pthread_equal 返回值
初始化线程
pthread_once 语法
pthread_once 返回值
停止执行线程
sched_yield 语法
sched_yield 返回值
设置线程的优先级
pthread_setschedparam 语法
pthread_setschedparam 返回值
获取线程的优先级
pthread_getschedparam 语法
pthread_getschedparam 返回值
向线程发送信号
pthread_kill 语法
pthread_kill 返回值
访问调用线程的信号掩码
pthread_sigmask 语法
pthread_sigmask 返回值
安全地 Fork
pthread_atfork 语法
pthread_atfork 返回值
终止线程
pthread_exit 语法
pthread_exit 返回值
结束
取消线程
取消点
放置取消点
取消线程
pthread_cancel 语法
pthread_cancel 返回值
启用或禁用取消功能
pthread_setcancelstate 语法
pthread_setcancelstate 返回值
设置取消类型
pthread_setcanceltype 语法
pthread_setcanceltype 返回值
创建取消点
pthread_testcancel 语法
pthread_testcancel 返回值
将处理程序推送到栈上
pthread_cleanup_push 语法
pthread_cleanup_push 返回值
从栈中弹出处理程序
pthread_cleanup_pop 语法
pthread_cleanup_pop 返回值
第 3 章 线程属性
属性对象
初始化属性
pthread_attr_init 语法
pthread_attr_init 返回值
销毁属性
pthread_attr_destroy 语法
pthread_attr_destroy 返回值
设置分离状态
pthread_attr_setdetachstate(3C) 语法
pthread_attr_setdetachstate 返回值
获取分离状态
pthread_attr_getdetachstate 语法
pthread_attr_getdetachstate 返回值
设置栈溢出保护区大小
pthread_attr_setguardsize(3C) 语法
pthread_attr_setguardsize 返回值
获取栈溢出保护区大小
pthread_attr_getguardsize 语法
pthread_attr_getguardsize 返回值
设置范围
pthread_attr_setscope 语法
pthread_attr_setscope 返回值
获取范围
pthread_attr_getscope 语法
pthread_attr_getscope 返回值
设置线程并行级别
pthread_setconcurrency 语法
pthread_setconcurrency 返回值
获取线程并行级别
pthread_getconcurrency 语法
pthread_getconcurrency 返回值
设置调度策略
pthread_attr_setschedpolicy(3C) 语法
pthread_attr_setschedpolicy 返回值
获取调度策略
pthread_attr_getschedpolicy 语法
pthread_attr_getschedpolicy 返回值
设置继承的调度策略
pthread_attr_setinheritsched 语法
pthread_attr_setinheritsched 返回值
获取继承的调度策略
pthread_attr_getinheritsched 语法
pthread_attr_getinheritsched 返回值
设置调度参数
pthread_attr_setschedparam 语法
pthread_attr_setschedparam 返回值
获取调度参数
pthread_attr_getschedparam 语法
使用指定的优先级创建线程
创建具有优先级的线程的示例
pthread_attr_getschedparam 返回值
设置栈大小
pthread_attr_setstacksize 语法
pthread_attr_setstacksize 返回值
获取栈大小
pthread_attr_getstacksize 语法
pthread_attr_getstacksize 返回值
关于栈
为线程分配栈空间
生成自己的栈
设置栈地址和大小
pthread_attr_setstack(3C) 语法
pthread_attr_setstack(3C) 返回值
获取栈地址和大小
pthread_attr_getstack 语法
pthread_attr_getstack 返回值
第 4 章 用同步对象编程
互斥锁属性
初始化互斥锁属性对象
pthread_mutexattr_init 语法
pthread_mutexattr_init 返回值
销毁互斥锁属性对象
pthread_mutexattr_destroy 语法
pthread_mutexattr_destroy 返回值
设置互斥锁的范围
pthread_mutexattr_setpshared 语法
pthread_mutexattr_setpshared 返回值
获取互斥锁的范围
pthread_mutexattr_getpshared 语法
pthread_mutexattr_getpshared 返回值
设置互斥锁类型的属性
pthread_mutexattr_settype 语法
pthread_mutexattr_settype 返回值
获取互斥锁的类型属性
pthread_mutexattr_gettype 语法
pthread_mutexattr_gettype 返回值
设置互斥锁属性的协议
pthread_mutexattr_setprotocol 语法
pthread_mutexattr_setprotocol 返回值
获取互斥锁属性的协议
pthread_mutexattr_getprotocol 语法
pthread_mutexattr_getprotocol 返回值
设置互斥锁属性的优先级上限
pthread_mutexattr_setprioceiling 语法
pthread_mutexattr_setprioceiling 返回值
获取互斥锁属性的优先级上限
pthread_mutexattr_getprioceiling 语法
pthread_mutexattr_getprioceiling 返回值
设置互斥锁的优先级上限
pthread_mutex_setprioceiling 语法
pthread_mutex_setprioceiling 返回值
获取互斥锁的优先级上限
pthread_mutex_getprioceiling 语法
pthread_mutex_getprioceiling 返回值
设置互斥锁的强健属性
pthread_mutexattr_setrobust_np 语法
pthread_mutexattr_setrobust_np 返回值
获取互斥锁的强健属性
pthread_mutexattr_getrobust_np 语法
pthread_mutexattr_getrobust_np 返回值
使用互斥锁
初始化互斥锁
pthread_mutex_init 语法
pthread_mutex_init 返回值
使互斥保持一致
pthread_mutex_consistent_np 语法
pthread_mutex_consistent_np 返回值
锁定互斥锁
pthread_mutex_lock 语法
pthread_mutex_lock 返回值
解除锁定互斥锁
pthread_mutex_unlock 语法
pthread_mutex_unlock 返回值
使用非阻塞互斥锁锁定
pthread_mutex_trylock 语法
pthread_mutex_trylock 返回值
销毁互斥锁
pthread_mutex_destroy 语法
pthread_mutex_destroy 返回值
互斥锁定的代码示例
锁分层结构的使用示例
嵌套锁定和单链接列表的结合使用示例
嵌套锁定和循环链接列表的示例
条件变量属性
初始化条件变量属性
pthread_condattr_init 语法
pthread_condattr_init 返回值
删除条件变量属性
pthread_condattr_destroy 语法
pthread_condattr_destroy 返回值
设置条件变量的范围
pthread_condattr_setpshared 语法
pthread_condattr_setpshared 返回值
获取条件变量的范围
pthread_condattr_getpshared 语法
pthread_condattr_getpshared 返回值
使用条件变量
初始化条件变量
pthread_cond_init 语法
pthread_cond_init 返回值
基于条件变量阻塞
pthread_cond_wait 语法
pthread_cond_wait 返回值
解除阻塞一个线程
pthread_cond_signal 语法
pthread_cond_signal 返回值
在指定的时间之前阻塞
pthread_cond_timedwait 语法
pthread_cond_timedwait 返回值
在指定的时间间隔内阻塞
pthread_cond_reltimedwait_np 语法
pthread_cond_reltimedwait_np 返回值
解除阻塞所有线程
pthread_cond_broadcast 语法
pthread_cond_broadcast 返回值
销毁条件变量状态
pthread_cond_destroy 语法
pthread_cond_destroy 返回值
唤醒丢失问题
生成方和使用者问题
使用信号进行同步
命名信号和未命名信号
计数信号量概述
初始化信号
sem_init 语法
初始化进程内信号
初始化进程间信号
sem_init 返回值
增加信号
sem_post 语法
sem_post 返回值
基于信号计数进行阻塞
sem_wait 语法
sem_wait 返回值
减小信号计数
sem_trywait 语法
sem_trywait 返回值
销毁信号状态
sem_destroy 语法
sem_destroy 返回值
使用信号时的生成方和使用者问题
读写锁属性
初始化读写锁属性
pthread_rwlockattr_init 语法
pthread_rwlockattr_init 返回值
销毁读写锁属性
pthread_rwlockattr_destroy 语法
pthread_rwlockattr_destroy 返回值
设置读写锁属性
pthread_rwlockattr_setpshared 语法
pthread_rwlockattr_setpshared 返回值
获取读写锁属性
pthread_rwlockattr_getpshared 语法
pthread_rwlockattr_getpshared 返回值
使用读写锁
初始化读写锁
pthread_rwlock_init 语法
pthread_rwlock_init 返回值
获取读写锁中的读锁
pthread_rwlock_rdlock 语法
pthread_rwlock_rdlock 返回值
读取非阻塞读写锁中的锁
pthread_rwlock_tryrdlock 语法
pthread_rwlock_tryrdlock 返回值
写入读写锁中的锁
pthread_rwlock_wrlock 语法
pthread_rwlock_wrlock 返回值
写入非阻塞读写锁中的锁
pthread_rwlock_trywrlock 语法
pthread_rwlock_trywrlock 返回值
解除锁定读写锁
pthread_rwlock_unlock 语法
pthread_rwlock_unlock 返回值
销毁读写锁
pthread_rwlock_destroy 语法
pthread_rwlock_destroy 返回值
跨进程边界同步
生成方和使用者问题示例
比较元语
第 5 章 使用 Solaris 软件编程
进程创建中的 fork 问题
Fork-One 模型
Fork-One 安全问题和解决方案
虚拟 fork -vfork
解决方案: pthread_atfork
pthread_atfork 返回值
Fork-all 模型
选择正确的 Fork
进程创建:exec 和 exit 问题
计时器、报警与剖析
每 LWP POSIX 计时器
每线程报警
剖析多线程程序
非本地转向:setjmp 和 longjmp
资源限制
LWP 和调度类
分时调度
实时调度
公平共享调度程序
固定优先级调度
扩展传统信号
同步信号
异步信号
延续语义
对信号执行的操作
设置线程的信号掩码
将信号发送到特定线程
等待指定信号
在给定时间内等待指定的信号
定向于线程的信号
完成语义
信号处理程序和异步信号安全
中断对条件变量的等待
I/O 问题
I/O 作为远程过程调用
人为的异步性
异步 I/O
异步 I/O 操作
等待 I/O 操作完成
共享的 I/O 和新的 I/O 系统调用
getc 和 putc 的替代项
第 6 章 安全和不安全的接口
线程安全
MT 接口安全级别
不安全接口的可重复执行函数
异步信号安全函数
库的 MT 安全级别
不安全库
第 7 章 编译和调试
编译多线程应用程序
为编译做准备
选择 Solaris 语义或 POSIX 语义
包括 <thread.h> 或 <pthread.h>
定义 _REENTRANT 或 _POSIX_C_SOURCE
使用 libthread 或 libpthread 链接
在 POSIX 环境中链接
在 Solaris 环境中链接
在混合环境中链接
与 POSIX 信号的 -lrt 链接
将原有模块与新模块链接
备用线程库
调试多线程程序
多线程程序中常见的疏忽性问题
使用 TNF 实用程序跟踪和调试
使用 truss
使用 mdb
使用 dbx
第 8 章 Solaris 线程编程
比较 Solaris 线程和 POSIX 线程的 API
API 的主要差异
函数比较表
Solaris 线程的独有函数
暂停执行线程
thr_suspend 语法
thr_suspend 返回值
继续执行暂停的线程
thr_continue 语法
thr_continue 返回值
相似的同步函数-读写锁
初始化读写锁
rwlock_init 语法
初始化进程内读写锁
初始化进程间读写锁
rwlock_init 返回值
获取读锁
rw_rdlock 语法
rw_rdlock 返回值
尝试获取读锁
rw_tryrdlock 语法
rw_tryrdlock 返回值
获取写锁
rw_wrlock 语法
rw_wrlock 返回值
尝试获取写锁
rw_trywrlock 语法
rw_trywrlock 返回值
解除锁定读写锁
rw_unlock 语法
rw_unlock 返回值
销毁读写锁的状态
rwlock_destroy 语法
rwlock_destroy 返回值
相似的 Solaris 线程函数
创建线程
thr_create 语法
thr_create 返回值
获取最小栈大小
thr_min_stack 语法
thr_min_stack 返回值
获取线程标识符
thr_self 语法
thr_self 返回值
停止执行线程
thr_yield 语法
thr_yield 返回值
向线程发送信号
thr_kill 语法
thr_kill 返回值
访问调用线程的信号掩码
thr_sigsetmask 语法
thr_sigsetmask 返回值
终止线程
thr_exit 语法
thr_exit 返回值
等待线程终止
thr_join 语法
thr_join,加入特定线程
thr_join,加入任何线程
thr_join 返回值
创建线程特定的数据键
thr_keycreate 语法
thr_keycreate 返回值
设置线程特定的数据值
thr_setspecific 语法
thr_setspecific 返回值
获取线程特定的数据值
thr_getspecific 语法
thr_getspecific 返回值
设置线程的优先级
thr_setprio 语法
thr_setprio 返回值
获取线程的优先级
thr_getprio 语法
thr_getprio 返回值
相似的同步函数-互斥锁
初始化互斥锁
mutex_init(3C) 语法
进程内的互斥锁
进程间的互斥锁
强健的进程间互斥
mutex_init 返回值
销毁互斥锁
mutex_destroy 语法
mutex_destroy 返回值
获取互斥锁
mutex_lock 语法
mutex_lock 返回值
释放互斥锁
mutex_unlock 语法
mutex_unlock 返回值
尝试获取互斥锁
mutex_trylock 语法
mutex_trylock 返回值
相似的同步函数:条件变量
初始化条件变量
cond_init 语法
进程内条件变量
进程间条件变量
cond_init 返回值
销毁条件变量
cond_destroy 语法
cond_destroy 返回值
等待条件
cond_wait 语法
cond_wait 返回值
等待绝对时间
cond_timedwait 语法
cond_timedwait 返回值
等待时间间隔
cond_reltimedwait 语法
cond_reltimedwait 返回值
解除阻塞一个线程
cond_signal 语法
cond_signal 返回值
解除阻塞所有线程
cond_broadcast 语法
cond_broadcast 返回值
相似的同步函数:信号
初始化信号
sema_init 语法
进程内信号
进程间信号
sema_init 返回值
增加信号
sema_post 语法
sema_post 返回值
基于信号计数阻塞
sema_wait 语法
sema_wait 返回值
减小信号计数
sema_trywait 语法
sema_trywait 返回值
销毁信号状态
sema_destroy(3C) 语法
sema_destroy(3C) 返回值
跨进程边界同步
生成方和使用者问题示例
fork() 和 Solaris 线程的特殊问题
第 9 章 编程原则
重新考虑全局变量
提供静态局部变量
同步线程
单线程策略
可重复执行函数
代码锁定
数据锁定
不变量和锁定
避免死锁
与调用相关的死锁
锁定原则
线程代码的一些基本原则
创建和使用线程
使用多处理器
基础体系结构
“共享内存”多处理器
Peterson 算法
在共享内存并行计算机上并行化循环
线程程序示例
需要进一步阅读的内容
附录 A 样例应用程序:多线程 grep
tgrep 的说明
附录 B Solaris 线程示例: barrier.c
© 2010, Oracle Corporation and/or its affiliates