Synchronization MIPS同步(ll/sc)

Synchronization MIPS同步(ll/sc),synchronization,mips,Synchronization,Mips,我想知道,在使用ll/sc时,如果在执行sc语句之前处理器发生了变化,结果会是什么 例如 CPU 1==>$t1=1,$t0=2 CPU 2==>$t1=30,$t0=40 内存==>$s0=99 如果我们执行这些语句: ll $t1, 0($s0) # CPU 1 ll $t1, 0($s0) # CPU 2 addi $t1, $t1, 1 # CPU 2 sc $t1, 0($s0) # CPU 2 ($t1 = 1, $s0 = 100) sc $t0, 0($s0)

我想知道,在使用ll/sc时,如果在执行sc语句之前处理器发生了变化,结果会是什么

例如

CPU 1==>$t1=1,$t0=2

CPU 2==>$t1=30,$t0=40

内存==>$s0=99

如果我们执行这些语句:

ll $t1, 0($s0)    # CPU 1
ll $t1, 0($s0)    # CPU 2
addi $t1, $t1, 1  # CPU 2
sc $t1, 0($s0)    # CPU 2 ($t1 = 1, $s0 = 100)
sc $t0, 0($s0)    # CPU 1
我知道在执行之后(如果我错了,请纠正我):

CPU 2==>$t1=1,$t0=40

CPU 1==>$t1=99


我不知道在最后一个CPU1命令之后,$s0和$t0会发生什么。$s0=2好吗?

好吧……我自己找到了解决方案。。。由于在CPU1上首次执行ll语句时CPU发生了变化,并且CPU2正在修改相同的内存区域,因此第5行(最后一行)中的sc将失败。因此,当sc发生故障时,$t0=0&由于最后一行中的sc故障,内存未被修改,所以$s0=100

资料来源:

读取加载链接(LL)和存储条件(SC)提取