-
多线程编程指南详尽阐述了线程标准、线程同步以及多线程编程原则等内容
资源介绍
目录
1 多线程基础介绍15
定义多线程术语15
符合多线程标准16
多线程的益处17
提高应用程序的响应 17
有效使用多处理器17
改进程序结构17
占用较少的系统资源17
结合线程和RPC(远程过程调用)18
多线程概念18
并发性和并行性 18
多线程结构一览 18
线程调度19
线程取消19
线程同步20
使用64 位体系结构20
2 基本线程编程23
线程库................................................................................................................................................. 23
创建缺省线程.............................................................................................................................. 23
等待线程终止.............................................................................................................................. 25
简单线程的示例......................................................................................................................... 26
分离线程..................................................................................................................................... 28
为线程特定数据创建键............................................................................................................ 29
删除线程特定数据键................................................................................................................. 30
3
设置线程特定数据..................................................................................................................... 31
获取线程特定数据..................................................................................................................... 32
获取线程标识符......................................................................................................................... 36
比较线程ID ................................................................................................................................ 36
初始化线程................................................................................................................................. 37
停止执行线程.............................................................................................................................. 38
设置线程的优先级..................................................................................................................... 38
获取线程的优先级..................................................................................................................... 39
向线程发送信号......................................................................................................................... 40
访问调用线程的信号掩码........................................................................................................ 41
安全地Fork ................................................................................................................................. 42
终止线程..................................................................................................................................... 42
结束.............................................................................................................................................. 43
取消线程..................................................................................................................................... 43
取消线程..................................................................................................................................... 45
启用或禁用取消功能................................................................................................................. 45
设置取消类型.............................................................................................................................. 46
创建取消点................................................................................................................................. 47
将处理程序推送到栈上............................................................................................................ 48
从栈中弹出处理程序................................................................................................................. 48
3 线程属性..............................................................................................................................................51
属性对象............................................................................................................................................. 51
初始化属性................................................................................................................................. 52
销毁属性..................................................................................................................................... 53
设置分离状态.............................................................................................................................. 54
获取分离状态.............................................................................................................................. 55
设置栈溢出保护区大小............................................................................................................ 56
获取栈溢出保护区大小............................................................................................................ 57
设置范围..................................................................................................................................... 58
获取范围..................................................................................................................................... 59
设置线程并行级别..................................................................................................................... 60
获取线程并行级别..................................................................................................................... 60
设置调度策略.............................................................................................................................. 61
获取调度策略.............................................................................................................................. 62
目录
4 多线程编程指南• 2006 年10 月
设置继承的调度策略................................................................................................................. 63
获取继承的调度策略................................................................................................................. 64
设置调度参数.............................................................................................................................. 64
获取调度参数.............................................................................................................................. 65
设置栈大小................................................................................................................................. 67
获取栈大小................................................................................................................................. 68
关于栈.......................................................................................................................................... 69
设置栈地址和大小..................................................................................................................... 71
获取栈地址和大小..................................................................................................................... 73
4 用同步对象编程.................................................................................................................................75
互斥锁属性......................................................................................................................................... 76
初始化互斥锁属性对象............................................................................................................ 77
销毁互斥锁属性对象................................................................................................................. 78
设置互斥锁的范围..................................................................................................................... 79
获取互斥锁的范围..................................................................................................................... 80
设置互斥锁类型的属性............................................................................................................ 80
获取互斥锁的类型属性............................................................................................................ 82
设置互斥锁属性的协议............................................................................................................ 82
获取互斥锁属性的协议............................................................................................................ 84
设置互斥锁属性的优先级上限............................................................................................... 85
获取互斥锁属性的优先级上限............................................................................................... 86
设置互斥锁的优先级上限........................................................................................................ 87
获取互斥锁的优先级上限........................................................................................................ 88
设置互斥锁的强健属性............................................................................................................ 89
获取互斥锁的强健属性............................................................................................................ 90
使用互斥锁......................................................................................................................................... 91
初始化互斥锁.............................................................................................................................. 92
使互斥保持一致......................................................................................................................... 93
锁定互斥锁................................................................................................................................. 94
解除锁定互斥锁......................................................................................................................... 96
使用非阻塞互斥锁锁定............................................................................................................ 97
销毁互斥锁................................................................................................................................. 98
互斥锁定的代码示例................................................................................................................. 99
条件变量属性.................................................................................................................................. 105
目录
5
初始化条件变量属性............................................................................................................... 106
删除条件变量属性................................................................................................................... 106
设置条件变量的范围............................................................................................................... 107
获取条件变量的范围............................................................................................................... 108
使用条件变量.................................................................................................................................. 109
初始化条件变量....................................................................................................................... 109
基于条件变量阻塞................................................................................................................... 111
解除阻塞一个线程................................................................................................................... 112
在指定的时间之前阻塞.......................................................................................................... 114
在指定的时间间隔内阻塞...................................................................................................... 116
解除阻塞所有线程................................................................................................................... 117
销毁条件变量状态................................................................................................................... 119
唤醒丢失问题............................................................................................................................ 120
生成方和使用者问题............................................................................................................... 120
使用信号进行同步.......................................................................................................................... 124
命名信号和未命名信号.......................................................................................................... 125
计数信号量概述....................................................................................................................... 125
初始化信号............................................................................................................................... 126
增加信号................................................................................................................................... 128
基于信号计数进行阻塞.......................................................................................................... 129
减小信号计数............................................................................................................................ 129
销毁信号状态............................................................................................................................ 130
使用信号时的生成方和使用者问题.................................................................................... 131
读写锁属性....................................................................................................................................... 133
初始化读写锁属性................................................................................................................... 134
销毁读写锁属性....................................................................................................................... 134
设置读写锁属性....................................................................................................................... 135
获取读写锁属性....................................................................................................................... 136
使用读写锁....................................................................................................................................... 136
初始化读写锁............................................................................................................................ 137
获取读写锁中的读锁............................................................................................................... 138
读取非阻塞读写锁中的锁...................................................................................................... 139
写入读写锁中的锁................................................................................................................... 139
写入非阻塞读写锁中的锁...................................................................................................... 140
解除锁定读写锁....................................................................................................................... 140
销毁读写锁............................................................................................................................... 141
目录
6 多线程编程指南• 2006 年10 月
跨进程边界同步............................................................................................................................... 142
生成方和使用者问题示例...................................................................................................... 142
比较元语........................................................................................................................................... 145
5 使用Solaris 软件编程......................................................................................................................147
进程创建中的fork 问题................................................................................................................. 147
Fork-One 模型........................................................................................................................... 148
Fork-all 模型.............................................................................................................................. 151
选择正确的Fork ....................................................................................................................... 151
进程创建:exec 和exit 问题....................................................................................................... 152
计时器、报警与剖析...................................................................................................................... 152
每LWP POSIX 计时器............................................................................................................. 152
每线程报警............................................................................................................................... 153
剖析多线程程序....................................................................................................................... 153
非本地转向:setjmp 和longjmp .................................................................................................. 154
资源限制........................................................................................................................................... 154
LWP 和调度类................................................................................................................................. 154
分时调度................................................................................................................................... 155
实时调度................................................................................................................................... 155
公平共享调度程序................................................................................................................... 155
固定优先级调度....................................................................................................................... 156
扩展传统信号.................................................................................................................................. 156
同步信号................................................................................................................................... 157
异步信号................................................................................................................................... 157
延续语义................................................................................................................................... 157
对信号执行的操作................................................................................................................... 158
定向于线程的信号................................................................................................................... 160
完成语义................................................................................................................................... 162
信号处理程序和异步信号安全............................................................................................. 163
中断对条件变量的等待.......................................................................................................... 165
I/O 问题............................................................................................................................................. 166
I/O 作为远程过程调用............................................................................................................ 167
人为的异步性............................................................................................................................ 167
异步I/O ..................................................................................................................................... 167
共享的I/O 和新的I/O 系统调用.......................................................................................... 169
目录
7
getc 和putc 的替代项............................................................................................................. 169
6 安全和不安全的接口...................................................................................................................... 171
线程安全........................................................................................................................................... 171
MT接口安全级别............................................................................................................................ 173
不安全接口的可重复执行函数............................................................................................. 174
异步信号安全函数.......................................................................................................................... 175
库的MT安全级别........................................................................................................................... 175
不安全库................................................................................................................................... 176
7 编译和调试....................................................................................................................................... 177
编译多线程应用程序...................................................................................................................... 177
为编译做准备............................................................................................................................ 177
选择Solaris 语义或POSIX 语义............................................................................................ 178
包括 或 .......................................................................................... 178
定义_REENTRANT 或_POSIX_C_SOURCE .................................................................................. 179
使用libthread 或libpthread 链接..................................................................................... 179
与POSIX 信号的-lrt 链接.................................................................................................... 181
将原有模块与新模块链接...................................................................................................... 181
备用线程库....................................................................................................................................... 181
调试多线程程序............................................................................................................................... 181
多线程程序中常见的疏忽性问题......................................................................................... 181
使用TNF 实用程序跟踪和调试............................................................................................ 182
使用truss ................................................................................................................................. 182
使用mdb ..................................................................................................................................... 182
使用dbx ..................................................................................................................................... 183
8 Solaris 线程编程...............................................................................................................................185
比较Solaris 线程和POSIX 线程的API ....................................................................................... 185
API 的主要差异........................................................................................................................ 185
函数比较表............................................................................................................................... 186
Solaris 线程的独有函数.................................................................................................................. 189
暂停执行线程............................................................................................................................ 190
继续执行暂停的线程............................................................................................................... 191
目录
8 多线程编程指南• 2006 年10 月
相似的同步函数-读写锁............................................................................................................. 192
初始化读写锁............................................................................................................................ 192
获取读锁................................................................................................................................... 194
尝试获取读锁............................................................................................................................ 194
获取写锁................................................................................................................................... 195
尝试获取写锁............................................................................................................................ 196
解除锁定读写锁....................................................................................................................... 196
销毁读写锁的状态................................................................................................................... 197
相似的Solaris 线程函数................................................................................................................. 199
创建线程................................................................................................................................... 199
获取最小栈大小....................................................................................................................... 201
获取线程标识符....................................................................................................................... 202
停止执行线程............................................................................................................................ 202
向线程发送信号....................................................................................................................... 203
访问调用线程的信号掩码...................................................................................................... 203
终止线程................................................................................................................................... 204
等待线程终止............................................................................................................................ 204
创建线程特定的数据键.......................................................................................................... 206
设置线程特定的数据值.......................................................................................................... 207
获取线程特定的数据值.......................................................................................................... 208
设置线程的优先级................................................................................................................... 208
获取线程的优先级................................................................................................................... 210
相似的同步函数-互斥锁............................................................................................................. 210
初始化互斥锁............................................................................................................................ 210
销毁互斥锁............................................................................................................................... 213
获取互斥锁............................................................................................................................... 213
释放互斥锁............................................................................................................................... 214
尝试获取互斥锁....................................................................................................................... 214
相似的同步函数:条件变量......................................................................................................... 215
初始化条件变量....................................................................................................................... 215
销毁条件变量............................................................................................................................ 216
等待条件................................................................................................................................... 217
等待绝对时间............................................................................................................................ 218
等待时间间隔............................................................................................................................ 218
解除阻塞一个线程................................................................................................................... 219
解除阻塞所有线程................................................................................................................... 220
目录
9
相似的同步函数:信号.................................................................................................................. 220
初始化信号............................................................................................................................... 220
增加信号................................................................................................................................... 222
基于信号计数阻塞................................................................................................................... 222
减小信号计数............................................................................................................................ 223
销毁信号状态............................................................................................................................ 224
跨进程边界同步............................................................................................................................... 224
生成方和使用者问题示例...................................................................................................... 224
fork() 和Solaris 线程的特殊问题................................................................................................ 227
9 编程原则........................................................................................................................................... 229
重新考虑全局变量.......................................................................................................................... 229
提供静态局部变量.......................................................................................................................... 230
同步线程........................................................................................................................................... 231
单线程策略232
可重复执行函数232
避免死锁234
与调用相关的死锁 235
锁定原则235
线程代码的一些基本原则236
创建和使用线程 236
使用多处理器237
基础体系结