WRS.NTO 能替代 LR/SC 吗?
不能。它只等待已有保留集相关事件;同步算法仍需要 LR/SC、AMO 或 CAS 等原子操作完成状态更新。
等待保留集存储事件(无超时)
WRS-NTO 使用 opcode 1110011(0x73)、funct3 000、funct12 000000001101、rs2 固定 x0。该固定 SYSTEM 编码没有显式汇编寄存器或立即数操作数;funct12、rs1、funct3、rd 和 opcode 必须与手册列出的常量一致。
当保留集有效且未观察到待处理中断(即使该中断被禁用)时,hart 可临时在低功耗状态停顿。它与 LR 建立的保留集配合用于轮询;实现也可因任何原因偶尔结束停顿。
WRS.NTO 是 Zawrs 等待保留集指令:在保留集有效且未观察到待处理中断时,hart 可以临时停顿;LR 用来建立该保留集。
结合 «retry: lr.w x10, (x11) ; ... ; wrs.nto ; j retry» 等实际代码理解该场景。
结合 «retry: lr.w x10, (x11) ; ... ; wrs.nto ; j retry» 等实际代码理解该场景。
结合 «retry: lr.w x10, (x11) ; ... ; wrs.nto ; j retry» 等实际代码理解该场景。
不能。它只等待已有保留集相关事件;同步算法仍需要 LR/SC、AMO 或 CAS 等原子操作完成状态更新。
不一定。官方允许实现因任何原因偶尔结束停顿,软件必须在循环中重新检查条件。