是否可以在不使用事务性内存的情况下在x86 / x86-64上为智能指针实现原子交换。对shared_ptr的原子交换特别感兴趣。
现代处理器上有CMPXCHG8B和CMPXCHG16B指令。是否可以将它们用于实现shared_ptr的原子交换?
CMPXCHG8B
CMPXCHG16B
我认为shared_ptr是不可能的,因为您必须在单个原子操作中修改指针本身以及旧对象和新对象的引用计数器。
shared_ptr
store确实不需要(因为商店可以交换),但load可能需要与store同时发生(实现为交换)。
store
load