这是用软件编写的测试和设置:
boolean TestAndSet(boolean *target) {
boolean rv = *target;
*target = TRUE;
return rv;
}
和
do {
while(TestAndSetLock(&lock))
; // do nothing
// critical section
lock = FALSE;
// remainder section
} while(TRUE);
我们可以在不支持硬件级别测试和设置的CPU中使用该机制吗?如果是这样,原子性如何得到保证?
答案 0 :(得分:0)
您可以使用Lamport'面包店'在没有TAS / CAS的机器上的互斥算法可以访问“原子”和“原子”。 (受保护的)价值。
http://www.disi.unige.it/person/DelzannoG/SO1/AA0607/bakery.htm
如果你没有合理限制的N'它只会变得复杂。过程
答案 1 :(得分:0)
测试和设置无法以您提议的方式在软件中实现。
这是因为上面的TestAndSet
应该是一种用来确保相互排斥的机制,但它不是原子的。然而,原子性只是互斥的另一个名称:必须通过确保两个进程不能同时执行其代码来保护TestAndSet
的内部变量。
因此,您通过这种方式定义了一种确保互斥的方法,这种方法本身需要一些机制来确保相互排斥。这个技巧可以播放很多次,但如果没有某种硬件支持,就不会有任何真正的进展。