【问题标题】:what will be the return read result from an atomic register原子寄存器的返回读取结果是什么
【发布时间】:2015-02-23 09:55:14
【问题描述】:

我有这两个线程。

Thread 1:  wwwww
Thread 2:   rrrrr

第一次写入来自线程 1,并与来自线程 2 的第一次读取重叠。

两个线程都将访问一个值为 33 的原子寄存器。 线程1将值68写入原子寄存器,线程2读取该值。

thread2 的返回结果是什么? 33 还是 68?

【问题讨论】:

  • 这取决于读取发生在写入之前还是之后。

标签: concurrency language-agnostic terminology atomic


【解决方案1】:

简单的答案:“原子”读/写的全部意义在于它强制序列化。所以结果将取决于哪个线程“先行”。如果先写入,则读取将返回新值,否则返回旧值。

如果您只有一个 CPU,则不能有“重叠”,因为一次只有一个线程在运行。

如果你有多个 CPU,它会在两个 CPU 之间反弹缓存时强制停止一个 CPU。只有缓存行的“所有者”可以写入,其他所有人都必须转储您写入的缓存的(只读)副本。

对于复杂的答案,您应该阅读 Ulrich Dreppers 的精彩文章 What every programmer should know about memory。具体来说,在第 2 部分的第 3.3.4 节中,它描述了 CPU 反弹缓存的协议。如果您正在处理原子内存访问,您可能需要良好的内存心理模型。而且记忆比你想象的要复杂得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多