老师您好,关于“硬件实现TSL指令”有一个问题
来源:9-7 锁的基础——硬件TSL和XCHG

Kian丶L
2020-06-26
假如有两个线程运行下图这段代码,LOCK初始值为0,那么在第一个线程运行完"TSL R0, LOCK"后,R0为0,此时在这停住(即CPU被调出去转而运行第二个线程了),然后第二个线程运行"TSL R0, LOCK",此时R0为1,此时在这停住(即CPU被调出去转而运行第一个线程了)。
问题来了,第一个线程执行“BNE R0, ZERO, enter_region”的时候,因为R0为1,不就一直循环了吗?然后第二个线程也是因为R0为1,一直循环了吗?又锁住了。。
所以这个方法是不是也会出现死锁的情况。。
怎么直观上感觉跟Peterson算法同样有缺陷。。
写回答
1回答
-
求老仙
2020-06-28
hello,同学,这里有个这样的前提,寄存器并不是共享的。具体可以参考讲进程切换的那节,进程切换时一定会保存原有寄存器值。激活后,又会恢复。所以r0并不是一个共享的地址。
00
相似问题