gpt4 book ai didi

C++11 原子:std::memory_order 代码可移植吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:14:54 24 4
gpt4 key购买 nike

在像 std::atomic::compare_exchange 这样的函数中,有像 std::memory_order_releasestd::memory_order_relaxed 这样的运行时参数。( http://en.cppreference.com/w/cpp/atomic/atomic/compare_exchange )

我不确定这些内存顺序标志是否保证存在于所有类型的 CPU/架构师中,如果某些 CPU 不支持标志,这个标志会导致崩溃还是?似乎其中一些标志是为英特尔安腾等设计的,不确定 std::memory_order 相关代码是否可移植。

你能给点建议吗?

最佳答案

C++ 标准确实有所谓的“独立”实现的概念,它可以支持标准库的一个子集。但是,它还定义了即使是独立实现也必须支持的最低限度功能。在该列表中是 <atomic>全部标题。

所以是的,实现必须支持这些。

但是,这并不意味着特定标志将完全且仅执行该标志所描述的内容。标志代表最小内存屏障,保证可见的特定事物。如果硬件实现没有低层内存屏障,即使对于不需要它的标志,实现也可以发出完整的内存屏障。

所以你应该按照标准写代码,让编译器整理细节。如果证明它在平台上效率低下,您可以检查程序集以查看是否可以改进问题。

但要回答您的主要问题,是的,基于原子的代码是可移植的(模编译器错误)。

关于C++11 原子:std::memory_order 代码可移植吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45356754/

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