理解 C++ 的 std::atomic<T> 和比较与交换

问题描述 投票:0回答:1

我的理解是比较和交换是由硬件支持的,例如x86架构中的CMPXCHG。我有以下两个困惑:

  • C++ 的原子性是否本身并没有“实现”原子性,而是利用了 CPU 的原子功能?
  • 但是如果架构没有比较和交换功能怎么办?如果该平台上的编译器想要符合 C++ 标准,它必须找到一些其他(可能计算成本更高)的方法来实现
    std::atomic
    ,而不使用比较和交换方法?
c++ atomic compare-and-swap
1个回答
0
投票

std::atomic
的专业化通常不需要无锁。

在不支持原子类型

X
所需操作的平台上,C++ 实现仍然可以在互斥体的帮助下实现
std::atomic<X>
。这样您就可以在多条指令中简单地执行比较和交换操作,同时锁定互斥体。

如果硬件没有明确支持,通常不可能实现无锁原子操作。

要测试

std::atomic
的特化是否是无锁的,请使用
std::atomic<X>::is_always_lock_free
或更弱的形式
std::atomic<X>::is_lock_free()

© www.soinside.com 2019 - 2024. All rights reserved.