gpt4 book ai didi

c++ - 使用std::atomic_ref 正确使用volatile

转载 作者:行者123 更新时间:2023-12-02 09:51:43 25 4
gpt4 key购买 nike

我在用std::atomic_ref<int>正确使用volatile时遇到了麻烦。
天真的有三种可能性:

std::atomic_ref<volatile int> ref1;
volatile std::atomic_ref<int> ref2;
volatile std::atomic_ref<volatile int> ref3;
我们什么时候要使用每个?我感兴趣的用例是MMIO。

最佳答案

std::atomic<T>不同,std::atomic_ref<T>没有volatile限定方法。因此,您可能对volatile std::atomic_ref<T>所做的工作不多(T本身是否易失)。
鉴于quote,这很有意义

Like language references, constness is shallow for atomic_ref - it is possible to modify the referenced value through a const atomic_ref object.


假设cv-qualification在某种程度上是一致的,那么一个稍微易变的atomic_ref不太可能有用,并且绝对不是您要的。
所以你要
std::atomic_ref<volatile int>
请注意,仅使用 std::atomic_ref<int>可能就足够了,但是由于该标准并未对MMIO做出任何明确的保证,因此您可能应查阅编译器文档和/或检查其生成的代码。
以这种方式依赖 std::atomic至少是不可移植的。具体来说, this answer及其 linked paper提到了 std::atomic可能不足的一些方式-您可以检查这些是否对您来说是实际的问题。

关于c++ - 使用std::atomic_ref <T>正确使用volatile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64026734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com