C++ Boost原子128位原子类型x86_64

C++ Boost原子128位原子类型x86_64,c++,boost,atomic,C++,Boost,Atomic,如何使用boost::atomic模板以获得真正的128位(16字节)CA、加载和存储? 问题是,即使是艰难的boost 1.55.0原子库也表示它现在有128位的支持,我只得到了模拟的假自旋锁实现。例如,以下代码将失败: struct ui128_t { uint64_t low, high; }; boost::atomic<ui128_t> atom; assert(atom.is_lock_free()); struct ui128{uint64}低,高;}; 原子原子;

如何使用boost::atomic模板以获得真正的128位(16字节)CA、加载和存储? 问题是,即使是艰难的boost 1.55.0原子库也表示它现在有128位的支持,我只得到了模拟的假自旋锁实现。例如,以下代码将失败:

struct ui128_t { uint64_t low, high; };
boost::atomic<ui128_t> atom;
assert(atom.is_lock_free());
struct ui128{uint64}低,高;};
原子原子;
断言(atom.is_lock_free());

我检查了BOOST_ATOMIC_INT128_LOCK_FREE宏,该宏由于某种原因设置为false,我不知道。我使用的是MSVC 2012 x64编译器。

此功能实际上尚未发布:它似乎只在“主干”中

您可以使用命令行

grep -R BOOST_ATOMIC_INT128_LOCK_FREE boost/

为了找出哪些编译器支持它

我不认为你可以让128位操作原子化,但是你可以使用平台实际支持的原子类型锁定它,直到它完成。如果没有更好的想法,你可以尝试使用内置类型,如_m128(SSE指令的类型).x86_64具有原子的
lock cmpxchg16b[ptr]
指令。MSVC支持或至少应该通过_InterlocatedCompareeExchange128支持此功能