JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C++ 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
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 内存边界内部函数

第 3 部分库

11.  使用库

12.  使用 C++ 标准库

13.  使用传统 iostream

14.  生成库

第 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() 注册的清除例程交叉执行。在特定的清除例程注册之后,函数调用的本地对象在例程执行前就被销毁了。