gpt4 book ai didi

c++,std::atomic,什么是 std::memory_order 以及如何使用它们?

转载 作者:IT老高 更新时间:2023-10-28 13:20:35 26 4
gpt4 key购买 nike

谁能解释一下 std::memory_order 是什么?用简单的英语,以及如何将它们与 std::atomic<> 一起使用?

我在这里找到了引用资料和几个例子,但根本不明白。 http://en.cppreference.com/w/cpp/atomic/memory_order

最佳答案

std::memory_order 值允许您对原子操作提供的内存排序指定细粒度约束。如果您正在从多个线程修改和访问原子变量,那么将 std::memory_order 值传递给您的操作允许您放松编译器和处理器上关于对这些原子变量的操作对其他线程可见的顺序,以及这些操作对应用程序中非原子数据的同步效果。

std::memory_order_seq_cst 的默认排序是最受限制的,并提供了您可能期望的“直观”属性:如果线程 A 存储一些数据,然后使用 设置原子标志std::memory_order_seq_cst,那么如果线程 B 看到标志被设置,那么它可以看到线程 A 写入的数据。其他内存排序值不一定提供这种保证,因此必须非常小心地使用。

基本前提是:不要使用除 std::memory_order_seq_cst (默认)以外的任何东西,除非 (a) 你真的真的知道你在做什么,并且可以证明宽松使用在所有情况下都是安全的,并且 (b) 您的分析器证明您打算使用宽松排序的数据结构和操作是一个瓶颈。

我的书,C++ Concurrency in Action用一整章(45 页)详细介绍了 C++ 内存模型、原子操作和 std::memory_order 约束,还有一章(44 页)用于在锁中使用原子操作进行同步- 自由的数据结构,以及放宽排序约束的后果。

我在 Dekker's algorithm 上的博客条目和 Peterson's algorithm为相互排斥证明了一些问题。

关于c++,std::atomic,什么是 std::memory_order 以及如何使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553591/

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