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.1 生成多线程程序

C++ 编译器附带的所有库都是多线程安全的。如果需要生成多线程应用程序,或者需要将应用程序链接到多线程库,必须使用 –mt 选项编译和链接程序。此选项会将 –D_REENTRANT 传递给预处理程序,并按正确的顺序将 –l thread 链接到 ld。在兼容模式 (–compat[=4]) 下,–mt 选项可确保在 libC 之前链接 libthread。在标准模式(缺省模式)下,-mt 选项可确保 libthread libCrun 之前链接。推荐使用 -mt,这是指定宏和库的替代方式,它更加简单且不易出错。

10.1.1 表明多线程编译

可以通过使用 ldd 命令检查应用程序是否链接到 libthread

example% CC -mt myprog.cc
example% ldd a.out
libm.so.1 =>      /usr/lib/libm.so.1
libCrun.so.1 =>   /usr/lib/libCrun.so.1
libthread.so.1 => /usr/lib/libthread.so.1
libc.so.1 =>      /usr/lib/libc.so.1
libdl.so.1 =>     /usr/lib/libdl.so.1

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

C++ 支持库 libCrunlibiostreamlibCstdlibC 是多线程安全的,但不是 async 安全的。这意味着,在多线程应用程序中,支持库中可用的函数不能用于信号处理程序中。这样做的话将导致死锁状态。

在多线程应用程序的信号处理程序中使用下列内容是不安全的: