2
如何使用boost :: atomic <>模板,以便獲得真正的128位(16字節)CAS,加載和存儲? 問題是,即使強硬的提升1.55.0原子庫表示它現在有128位支持我只能得到假spinlock模擬實現。例如。下面的代碼將失敗:Boost原子128位原子類型x86_64
struct ui128_t { uint64_t low, high; };
boost::atomic<ui128_t> atom;
assert(atom.is_lock_free());
我檢查其設置爲false,由於某種原因,我不知道BOOST_ATOMIC_INT128_LOCK_FREE宏。我正在使用MSVC 2012 x64編譯器。
我不認爲你可以做一個128位原子操作,你可以把然而鎖它,直到它的完成後,使用該平臺實際支持的原子類型。 – dtech
由於缺乏更好的想法,您可以嘗試使用像_m128這樣的內建類型(SSE指令的類型)。 – 2014-01-29 14:03:27
x86_64有'lock cmpxchg16b [ptr]'指令,它是原子的。 MSVC支持或至少應該支持通過_InterlockedCompareExchange128 – JATothrim