From 1c538d9ab48d730957f804320dcc1cc5785e3f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9E=97=E4=BC=9F?= Date: Thu, 31 Oct 2024 18:03:51 +0800 Subject: [PATCH] Update ch8 2lock.rst --- source/chapter8/2lock.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/chapter8/2lock.rst b/source/chapter8/2lock.rst index 09e36608d..6dacb40eb 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: