是否可以同轴 std::atomic<T> 输出CMPXCHG16B

Is it possible to coax std::atomic<T> to output CMPXCHG16B

本文关键字:lt gt CMPXCHG16B 输出 atomic std 是否      更新时间:2023-10-16
是否可以为

我对在 Windows x64 上使用原子联锁操作不感兴趣的类型哄骗 std::atomic 输出CMPXCHG16B,或者我只需要吸收它并手动执行原子操作?我可以让GCC/Clang在Linux上执行此操作,所以我怀疑这只是Microsoft标准库的问题。

struct Byte16
{
    int64_t a, b;
};
std::atomic<Byte16> atm;
Byte16 a = { 1, 2 };
atm.compare_exchange_strong(...); // This has a lock on Windows, not on Linux version of code

窗口中使用__m128

#include <emmintrin.h>
//...
  std::atomic<__m128> a, c;
  __m128 b;
  a.compare_exchange_strong(b,c);
///...