原子是 C11 和 C++11 标准中新增的一种语言功能,它需要来自操作系统的运行时支持。有关使用原子功能的更多信息,请参见 atomic_fence(3A)、atomic_flag(3A) 和 stdatomic.h(3A) 手册页。
由于还没有用于此运行时支持的标准接口,因此,gcc 原子库和 Oracle Developer Studio 原子库之间稍有差异。
GCC 通过名为 libatomic.so(在 Oracle Solaris 11.3 和 Oracle Linux 7.x 上,它包括在 /usr/lib 中)的运行时库来支持原子。
Oracle Developer Studio 12.5 编译器通过名为 libstatomic.so 的新运行时库来支持原子。此库与 Oracle Developer Studio 发行版捆绑在一起,且未包括在 Oracle Solaris 或 Oracle Linux 中。这是可以将 GCC 和 Oracle Developer Studio 库合并和并入 Oracle Solaris 之前以及 Linux 捆绑的库符合标准接口之前的临时解决方案。
libstatomic.so 库已经过测试,与 libstatomic.so 的 GCC 4.8、4.9 和 5.1 发行版兼容,与 GCC 原子库 libatomic 的兼容性中讨论了一些例外情况。
使用新的编译器选项 –xatomic,可以指定在链接程序和库时是使用 GCC libatomic 库还是使用 Oracle Developer Studio libstatomic 库。