JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.2:C++ 用户指南
search filter icon
search icon

文档信息

前言

第 1 部分C++ 编译器

1.  C++ 编译器

2.  使用 C++ 编译器

3.  使用 C++ 编译器选项

第 2 部分编写 C++ 程序

4.  语言扩展

5.  程序组织

6.  创建和使用模板

7.  编译模板

8.  异常处理

9.  改善程序性能

10.  生成多线程程序

10.1 生成多线程程序

10.1.1 表明多线程编译

10.1.2 与线程和信号一起使用 C++ 支持库

10.2 在多线程程序中使用异常

10.2.1 线程取消

10.3 在线程之间共享 C++ 标准库对象

10.4 在多线程环境中使用传统 iostream

10.4.1 MT 安全的 iostream 库的组织

10.4.1.1 公共转换例程

10.4.1.2 使用 MT 安全的 libC 库进行编译和链接

10.4.1.3 MT 安全的 iostream 限制

10.4.1.4 减少多线程安全类的性能开销

10.4.2 iostream 库接口更改

10.4.2.1 新增类

10.4.2.2 新增类的分层结构

10.4.2.3 新增函数

10.4.3 全局和静态数据

10.4.4 序列执行

10.4.5 对象锁定

10.4.5.1 stream_locker

10.4.6 多线程安全类

10.4.7 对象析构

10.4.8 示例应用程序

10.5 内存边界内部函数

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  使用复数运算库

15.  生成库

第 4 部分附录

A.  C++ 编译器选项

B.  Pragma

词汇表

索引

10.2 在多线程程序中使用异常

对于多线程而言,当前的异常处理实现是安全的,一个线程中的异常与其他线程中的异常互不影响。不过,您不能使用异常来进行线程之间的通信;一个线程中抛出的异常不会被其他线程捕获到。

每个线程都可设置其自己的 terminate()unexpected() 函数。在一个线程中调用 set_terminate()set_unexpected() 只影响该线程中的异常。对于任何线程,terminate() 的缺省函数是 abort()(请参见8.2 指定运行时错误)。

10.2.1 线程取消

通过调用 pthread_cancel(3T) 取消线程会导致销毁栈上的自动(局部非静态)对象,但指定了 -noex-features=no%except 时例外。

pthread_cancel(3T) 使用的机制与异常相同。取消线程时,局部析构函数与用户通过 pthread_cleanup_push() 注册的清除例程交叉执行。在特定的清除例程注册之后,函数调用的本地对象在例程执行前就被销毁了。