【发布时间】:2014-09-19 14:50:40
【问题描述】:
我正在开发一个依赖于 GCC 的 atomic built-ins 的项目。在将项目移植到 Windows 时,我试图找到 GCC atomics 的 Interlocked* 对应项。大多数操作实际上都是可用的,但我错过了应用 __ATOMIC_CONSUME 和 __ATOMIC_ACQ_REL 内存语义的操作。由于 _*Barrier 内在函数是 deprecated,Microsoft advises 使用 std::atomic(例如 atomic_thread_fence)等 C++11 标准。
我想知道:C 程序员应该做什么,我们如何在不使用 C++11 的情况下实现具有 __ATOMIC_CONSUME 和 __ATOMIC_ACQ_REL 语义的 atomics 的可移植版本?
【问题讨论】:
-
当然,“正确”的方法可能是回退到更强的语义,即分别为 __ATOMIC_ACQUIRE 和 __ATOMIC_SEQ_CST...
-
Visual Studio 2013 是否支持 C11?我认为它只有 std::atomic...
标签: c windows gcc atomic interlocked