我的理解是比较和交换是由硬件支持的,例如x86架构中的CMPXCHG。我有以下两个困惑:
std::atomic
,而不使用比较和交换方法?std::atomic
的专业化通常不需要无锁。
在不支持原子类型
X
所需操作的平台上,C++ 实现仍然可以在互斥体的帮助下实现 std::atomic<X>
。这样您就可以在多条指令中简单地执行比较和交换操作,同时锁定互斥体。
如果硬件没有明确支持,通常不可能实现无锁原子操作。
要测试
std::atomic
的特化是否是无锁的,请使用 std::atomic<X>::is_always_lock_free
或更弱的形式 std::atomic<X>::is_lock_free()
。