原子寄存器读取操作 Return 值

Atomic Register Read Operation Return Value

我想知道这些选项中哪个是正确的。

最初保存值 33 的原子寄存器 R 被执行以下操作的两个进程 P 和 Q 使用 以下并发操作:P 在时间间隔 [2,6] 期间执行 write(R,68) 并且 Q 执行 read(R) 在时间间隔 [4,7] 期间(操作在时间上重叠)。在这种情况下,由于 register 提供原子语义,保证:

(A) 读取操作总是returns value 68.

(B) 读取操作总是returns value 33.

(C) 读取操作可以 return 值 33 或值 68。

(D)什么都不能保证,因为操作是并发的。

我知道原子寄存器确保

if Ri → Rj then i j (if i is before j)

您可以在此处阅读解释: What's the difference between safe, regular and atomic registers?

值得注意的信息是

Readers that act at a point before that point will all read the old value and readers that act after that point will all read the new value

因此根据定义,由于读取发生在写入完成之前,因此它应该始终看到 33。如果是普通寄存器,它可能会在两者之间闪烁。

在并发读写期间,读取可以return旧值或新值。为了保持原子寄存器的属性,在写入过程中,有一个时间点:

  • 之前总是 return 编辑 33,
  • 之后总是 return编辑 68。

因此,选项(C)正确。