入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
TSL指令是由硬件实现的,执行的过程是不允许被中断的,只能一气合成
需要一个共享变量 lock,用来表示临界区是否被占有,true表示已加锁,false表示未加锁
TSL的内部逻辑是 每次进入 不管有没有加锁,都直接加锁,然后返回old值(原本lock的值)
TSL指令想上锁和检查的变成一气呵成的原子操作
还是不满足让权等待的原则,因为暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,而导致忙等
京公网安备 11010502049817号