diff --git a/source/chapter8/2lock.rst b/source/chapter8/2lock.rst index 09e36608..6dacb40e 100644 --- a/source/chapter8/2lock.rst +++ b/source/chapter8/2lock.rst @@ -705,7 +705,7 @@ RISC-V 提供的另一类原子指令被称为加载保留/条件存储(Load R 那么 SC 指令是如何判断此前一段时间该内存中的值是否被修改呢?在 RISC-V 架构下,存在一个 **保留集** (Reservation Set) 的概念,这也是“加载保留”这种叫法的来源。保留集用来实现 LR/SC 的检查机制:当 CPU 执行 LR 指令的时候,硬件会记录下此时内存中的值是多少,此外还可能有一些附加信息,这些被记录下来的信息就被称为保留集。之后,当其他 CPU 或者外设对内存这个值进行修改的时候,硬件可以将这个值对应的保留集标记为非法或者删除。等到之前执行 LR 指令的 CPU 执行 SC 指令的时候,CPU 就可以检查保留集是否存在/合法或者保留集记录的值是否与内存中现在的值一致,以这种方式来决定是否进行写入以及目标寄存器 ``rd`` 的值。 -RISC-V 并不原生支持 CAS/TAS 原子指令,但我们可以通过 LR/SC 指令对来实现它。比如下面是通过 LR/SC 指令对来模拟 CAS 指令。有兴趣的同学可以对照注释自行研究。 +RISC-V 支持 TAS 原子指令 ``amoswap`` ,并不原生支持 CAS 原子指令,但我们可以通过 LR/SC 指令对来实现它。比如下面是通过 LR/SC 指令对来模拟 CAS 指令。有兴趣的同学可以对照注释自行研究。 .. code-block:: riscv :linenos: