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