Concurrency 原子寄存器的返回读取结果是什么

Concurrency 原子寄存器的返回读取结果是什么,concurrency,language-agnostic,terminology,atomic,Concurrency,Language Agnostic,Terminology,Atomic,我有这两条线 Thread 1: wwwww Thread 2: rrrrr 第一次写入来自线程1,与线程2的第一次读取重叠 两个线程都将访问一个值为33的原子寄存器。 Thread1将值68写入原子寄存器,thread2读取该值 thread2的返回结果是什么?33或68?简单的答案是:“原子”读/写的全部要点是它强制序列化。因此,结果将取决于哪个线程“先走”。如果先写入,则读取将返回新值,否则返回旧值 如果您只有一个CPU,那么就不会有“重叠”,因为一次只运行一个线程 如果有多个CP

我有这两条线

Thread 1:  wwwww
Thread 2:   rrrrr
第一次写入来自线程1,与线程2的第一次读取重叠

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


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

简单的答案是:“原子”读/写的全部要点是它强制序列化。因此,结果将取决于哪个线程“先走”。如果先写入,则读取将返回新值,否则返回旧值

如果您只有一个CPU,那么就不会有“重叠”,因为一次只运行一个线程

如果有多个CPU,它将强制暂停一个CPU,同时在两个CPU之间跳转缓存。只有缓存线的“所有者”才能写入缓存线,其他人必须转储您写入缓存线的(只读)副本


对于复杂的答案,你应该阅读乌尔里希·德雷普斯(Ulrich Dreppers)的精彩文章。具体地说,在第2部分的第3.3.4节中,它描述了CPU跳转缓存的协议。如果你在处理原子内存访问,你可能需要良好的内存心智模型。而且记忆比你想象的要复杂得多。

这取决于读操作是在写操作之前还是之后进行的。