gpt4 book ai didi

multithreading - c++ 11中的宽松内存模型的基 native 制是什么?

转载 作者:行者123 更新时间:2023-12-03 12:55:56 25 4
gpt4 key购买 nike

假设有两个线程,t1和t2。 t1修改全局标记f1,而t2修改大约同时的全局标记f2。如果t1尝试读取f2(或t2读取f1),是否可以读取f2(或f1)的旧值?

这个问题实际上根本不是关于C++ 11的。我只想了解多线程程序在缓存一致性方面的行为,以及宽松模型的产生方式和原因,以及它的有用性。

最佳答案

宽松的排序仅保证线程永远不会观察到特定内存位置的旧值大于观察到的最新值。如果t1在问题中提到的特定阅读之前从未观察过f2,则它可以观察到曾经写入f2的任何值。

就其本身而言,将memory_order_relaxed与C++ 11 std::atomic结合使用非常薄弱。它只是保证读/写对于其他线程是不可分割的:没有线程会看到部分写入(撕裂)的值。放宽的排序实际上仅在与其他内存操作交互或用于读取-修改-写入操作时才有用。保证读-修改-写操作可以读取最近写入的值,而与内存顺序无关。

关于multithreading - c++ 11中的宽松内存模型的基 native 制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181762/

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