InterlockedExchangePointer是否有替换c ++ 11(或boost)?

kre*_*ieg 5 c++ winapi multithreading boost c++11

寻找Win32 InterlockedExchangePointer的便携,简单和优雅的替代品.理想情况下只使用C++ 11,但也会使用boost.

Mik*_*our 10

标准的原子类型有一个原子exchange功能.所以微软公司

PVOID volatile target;
old_value = InterlockedExchangePointer(&target, new_value);
Run Code Online (Sandbox Code Playgroud)

会成为

std::atomic<T*> target;
old_value = target.exchange(new_value);
Run Code Online (Sandbox Code Playgroud)

  • @kreuzerkrieg:请问每个问题一个问题.默认情况下,存在完整的内存屏障,但您可以在第二个参数中指定其他内存顺序.共享指针不提供原子交换操作,您必须执行其他操作(使用单独的原子指针或互斥锁). (2认同)