老师您好,关于“硬件实现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算法同样有缺陷。。

http://img.mukewang.com/szimg/5ef58e1509c649d619200842.jpg

写回答

1回答

求老仙

2020-06-28

hello,同学,这里有个这样的前提,寄存器并不是共享的。具体可以参考讲进程切换的那节,进程切换时一定会保存原有寄存器值。激活后,又会恢复。所以r0并不是一个共享的地址。

0
0

大学计算机必修课新讲--编译原理+操作系统+图形学

轻松超越大学课程,前阿里P8专家的实践精华总结

1752 学习 · 157 问题

查看课程