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.5 内存边界内部函数

编译器提供头文件 mbarrier.h,该文件为 SPARC 和 x86 处理程序定义各种内存边界内部函数。这些内部函数对于使用自己的同步基元编写多线程代码的开发人员很有用。建议用户参考其处理器文档,以确定他们的特定情况是否需要以及何时需要这些内部函数。

mbarrier.h 支持的内存排序内部函数:

__compiler_barrier() 内部函数之外的所有边界内部函数都会生成内存排序指令,在 x86 上为 mfencesfencelfence 指令,在 SPARC 平台上为 membar 指令。

__compiler_barrier() 内部函数不生成任何指令,而是通知编译器必须先完成之前的所有内存操作,才能启动以后的内存操作。这样的特殊结果是,具有静态存储类说明符的所有非局部变量和局部变量都将存储回内存中的边界之前,并在边界之前重新装入,编译器不会将边界之前的内存操作与边界之后的内存操作混合。所有其他边界都隐式包含 __compiler_barrier() 内部函数的行为。

例如,在下面的代码中,__compiler_barrier() 内部函数的出现会禁止编译器合并两个循环:

#include "mbarrier.h"
int thread_start[16];
void start_work()
{
/* Start all threads */
   for (int i=0; i<8; i++)
   {
     thread_start[i]=1;
   }
   __compiler_barrier();
/* Wait for all threads to complete */
   for (int i=0; i<8; i++)
   {
      while (thread_start[i]==1){}
   }
}