2

适用于 64 位 Linux 的 Oracle (Sun) Studio 12.2 C/C++/Fortran 编译器是否具有与 gcc 中提供的 __sync_fetch_and_add 函数等效的功能?我似乎无法在 Sun 文档中找到 intel atomics 的包装代码,也无法在我的 Sun Studio 安装中找到 .h 文件。这意味着要么我不擅长搜索,要么它可能不存在,不确定是哪个。

我碰巧需要使用 Sun C/C++ 编译器访问 intel i7 上可用的任何原子硬件功能,例如 Test-and-set、Compare-and-swap、Fetch-and-foo。

这很复杂,因为我不是汇编程序员,而且这是 Sun 编译器而不是 GCC 编译器,所以从 gcc 的开源实现中复制 asm 代码不一定能工作,最后它是 64 位编译器和硬件,因此很容易找到的 32 位示例不一定能在 64 位系统上正常工作。

背景:目的是实现一些需要这些特定硬件原子的多核并发程序。

谢谢阅读。

4

1 回答 1

4

从 Oracle 文档中,您需要包含 atomic.h 并使用以下选项之一:

uint_t atomic_add_int_nv(volatile uint_t *target, int delta);
uint64_t atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval);
void atomic_or_32(volatile uint32_t *target, uint32_t bits);

... ETC。

http://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hr06/index.html

于 2012-02-06T23:36:50.173 回答