目录 1
第1章 C++组件简介 1
1.1 既是好消息,也是坏消息 1
1.2 面向对象方法 2
1.3 面向对象架构 2
1.4 C++组件 3
1.5 面向对象软件组件 3
1.5.1 什么是类 4
1.5.2 抽象数据类型 4
1.5.3 类作为模型 8
1.5.4 类类型 9
第2章 进程解剖 25
2.1 什么是进程 25
2.2 进程状态 28
2.3 进程优先权 34
2.4 上下文切换 35
2.5 进程关系 35
2.5.1 进程终止 39
2.5.2 同步和异步进程 39
2.6 进程映射 41
2.7 进程资源 42
2.7.1 硬件资源 43
2.7.3 软件资源 44
2.7.4 优先权与资源 44
2.7.2 数据资源 44
第3章 轻量级进程:线程 47
3.1 多线程处理 49
3.2 线程与进程的相似之处 52
3.3 线程与进程的不同之处 52
3.4 线程的优点 53
3.6 线程类型 54
3.6.1 休眠(sleeper)和单步(one-shot) 54
3.5 线程的缺点 54
3.6.2 先占工作 55
3.6.3 延迟工作 55
3.7 线程相关信息 55
3.8 线程创建 57
3.8.1 谁可以终止线程 58
3.8.2 分离线程 60
3.8.3 远程线程 60
3.9 线程堆栈 60
3.10 线程控制 61
3.10.1 临界区 61
3.10.2 挂起和恢复线程 63
3.11 线程优先权 64
3.12 线程状态 70
3.13 线程与资源 71
3.14 线程的实现模型:用户级线程 71
3.14.1 核心级线程 71
3.14.2 混合线程 71
第4章 多任务与多线程编程 73
4.1 什么是多任务编程 73
4.1.1 对话级多任务编程 74
4.1.2 进程级多任务编程 74
4.2 合作和抢占式多任务 75
4.1.3 多线程编程 75
4.2.1 合作多任务 76
4.2.2 抢占式多任务 78
4.2.3 时间片的大小 79
4.3 多处理器下的多线程 80
4.3.1 非对称多处理器处理 81
4.3.2 对称多处理器处理 81
4.3.3 具有多处理器的多线程处理模型 82
4.4 规划策略 84
4.4.1 规划策略目标 84
4.4.2 规划策略准则 85
4.4.3 轮询和FIFO规划 86
4.4.4 最短任务优先规划法 87
4.4.5 最短剩余时间规划法 88
第5章 进程间和线程间通信 89
5.1 依赖关系 89
5.1.1 通信依赖性 90
5.1.2 合作依赖性 91
5.1.3 计数线程与进程依赖性 91
5.2 进程间和线程间通信 94
5.2.1 什么是进程间通信 94
5.2.2 进程间通信类型 95
5.3 线程间通信 114
第6章 合作与同步 123
6.1 竞争条件 123
6.1.1 数据同步 127
6.1.2 硬件同步 127
6.1.3 任务同步 128
6.2 同步关系 129
6.3 进程同步机制 130
6.3.1 信号量提供钥匙 130
6.3.2 信号量类型 132
6.3.4 使用互斥量锁定防止竞争条件 136
6.3.3 自愿互斥量策略 136
6.3.5 临界区 145
6.4 避免竞争条件 147
6.5 死锁必需的条件 148
6.6 远离死锁 148
第7章 接口类与进程间通信 149
7.1 接口类详解 149
7.1.1 接口类的类型 149
7.1.2 减小参数和全局变量的数量 155
7.2 C++没有多线程处理的关键字 157
7.3 面向对象接口到管道 158
7.4 使用接口类来实现面向对象命名管道 173
7.4.1 相关客户/服务器术语 174
7.4.2 名字包含哪些内容 174
7.4.3 命名管道和iostream复合 175
7.4.4 npstream接口类 176
7.4.5 命名管道与STL istream_iterator和ostream_iterator 181
第8章 同步对象 185
8.1 初识mutex类 186
8.1.1 命名互斥量类 195
8.1.2 同步和依赖性关系(示例) 199
8.1.3 表示条件的类 206
8.1.4 等待多个事件或互斥量 213
8.1.5 通过类成员函数锁定和取消锁定 217
8.1.6 小结 219
第9章 线程处理面向对象架构 221
9.1 什么是多线程架构 221
9.2 使用多线程的常见架构 223
9.2.1 文件服务器 225
9.2.2 数据库服务器和事务服务器 227
9.2.3 应用服务器 229
9.2.4 事件驱动架构 233
9.3 黑板架构 235
9.4 途径上的不同(面向对象与过程化) 237
9.4.1 封装是关键(保护和数据隐藏) 239
9.4.2 类成员函数CREW策略 251
9.5 增量多线程处理 252
第10章 类层次和线程处理C++组件 255
10.1 抽象基类 255
10.2 具体类——理想终结者 258
10.2.1 多线程层次中的节点类 260
10.2.2 线程与容器和集合类 261
10.2.3 应用框架类 276
11.1 线程、对象和作用域 295
第11章 类行为和线程处理 295
11.1.1 连接与作用域 296
11.1.2 线程和类作用域 297
11.2 同步关系和对象成员函数 297
11.3 在多线程环境中构建和析构对象 306
11.3.1 exit()和abort() 306
11.3.2 构造函数和SS关系 307
11.3.3 析构函数与FF关系 308
11.3.4 线程集合与对象 309
11.3.5 线程与异常处理 311
11.4 线程安全函数 318
11.5 多线程环境中的不安全函数 319
11.6 在多线程架构中使用STL算法 320
第12章 测试多线程应用程序 323
12.1 软件测试的目标 323
12.1.1 分而治之(divide and conquer) 324
12.1.2 软件测试类型 326
12.1.3 对象的组件复合 327
12.1.4 成员函数访问数据组件 328
12.1.5 成员函数正确性 328
12.1.7 成员函数调用序列 329
12.1.6 对象的过渡状态 329
12.1.8 对象完整性 330
12.2 对象的测试实例 336
12.2.1 对象构建的测试实例 336
12.2.2 析构函数的测试实例 337
12.2.3 赋值的测试实例 338
12.2.4 对象派生子类 339
12.2.5 成员函数性能的测试实例 339
12.2.6 对象资源需求和测试实例 340
12.2.7 测试公有对象访问、受保护对象访问以及线程化对象访问 340
12.3.2 规划问题 341
12.3.1 开放层次问题 341
12.3 测试多线程架构的问题 341
12.4 使用常用模型和架构 342
第13章 实现并发的最后思考 345
附录A POSIX线程管理规范 349
附录B 类关系图规范 387
附录C POSIX线程管理函数 391
附录D Win32线程管理函数 415
附录E OS/2线程管理函数 439
附录F 线程和同步类(POSIX,Win32以及OS/2) 473
参考文献 503
索引 509