有人能用简单易懂的语言解释一下std::memory_order
是什么,以及如何与std::atomic<>
一起使用吗?
我在这里找到了参考资料和一些例子,但完全不理解。 http://en.cppreference.com/w/cpp/atomic/memory_order
有人能用简单易懂的语言解释一下std::memory_order
是什么,以及如何与std::atomic<>
一起使用吗?
我在这里找到了参考资料和一些例子,但完全不理解。 http://en.cppreference.com/w/cpp/atomic/memory_order
std::memory_order_seq_cst
(默认值)以外的任何东西,并且(b)您的分析工具证明您打算使用放松排序的数据结构和操作是瓶颈。
我的书《C++ Concurrency in Action》专门介绍了C++内存模型、原子操作和std::memory_order
约束的详细信息,并进一步介绍了使用原子操作进行同步的无锁数据结构以及放松排序约束的后果。
我关于互斥的Dekker's algorithm和Peterson's algorithm的博客文章演示了其中的一些问题。
bool shouldHalt
。在我的经验中,这种隔离在正常软件开发中并不罕见。我认为,在另一种情况下(多个变量之间的依赖关系),锁几乎总是更好的选择。我唯一看到人们可能会遇到困难的方式是使用花哨的原子链式数据结构,除非有严重的需求,否则这才是真正需要注意的地方。 - VoidStarstd::memory_order
之后,您使用了许多不同的排序方式(甚至在解释5.3.3节中它们实际上是做什么之前),而不是像您在这个答案中建议的那样坚持使用std::memory_order_seq_cst
。这是否意味着这个答案(或书籍)是错误的,还是我误解了什么? - user11313931std::memory_order_seq_cst
。 - Anthony Williamsstd::atomic<T>
直到您确信存在可通过使用松弛内存顺序解决的性能问题为止。编号。一个“简明易懂”的解释需要32页,可以在此处找到。
如果您不想阅读该页面,则可以忘记内存排序,因为您链接的页面表明默认是顺序一致性排序,这是“始终执行合理操作”的设置。
要使用任何其他设置,您必须真正阅读并理解上述文章及其中的示例。