InterlockedCompareExchange
在 Windows 中,以及__sync_val_compare_and_swap
在 gcc 中获取指针,因此我可以将任何地址(例如指向共享内存块的地址)传递给这些函数。
对于非 x86 架构,我可能必须确保内存对齐以确保正确性,而对于 x86(可能还有其他),我可能希望确保缓存行对齐以提高性能,尽管正确性不应该成为问题(-> x86LOCK
前缀) .
试图摆脱我的代码中一些依赖于平台的东西(Windows VC++ 与 GCC),我看了一下 C++11atomic_compare_exchange_weak
和朋友。但它们都适用于 type 的变量std::atomic<T>*
。
有没有办法在 C++11 的原子函数中使用任意指针?它看起来不像是对 std::atomic的简单转换可以解决这个问题。