可以在没有硬件支持的软件中实现测试和设置吗?

时间:2014-08-04 11:08:04

标签: c operating-system synchronization mutual-exclusion

这是用软件编写的测试和设置:

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中使用该机制吗?如果是这样,原子性如何得到保证?

2 个答案:

答案 0 :(得分:0)

您可以使用Lamport'面包店'在没有TAS / CAS的机器上的互斥算法可以访问“原子”和“原子”。 (受保护的)价值。

http://www.disi.unige.it/person/DelzannoG/SO1/AA0607/bakery.htm

如果你没有合理限制的N'它只会变得复杂。过程

答案 1 :(得分:0)

如果没有硬件支持,

测试和设置无法以您提议的方式在软件中实现。

这是因为上面的TestAndSet应该是一种用来确保相互排斥的机制,但它不是原子的。然而,原子性只是互斥的另一个名称:必须通过确保两个进程不能同时执行其代码来保护TestAndSet的内部变量。

因此,您通过这种方式定义了一种确保互斥的方法,这种方法本身需要一些机制来确保相互排斥。这个技巧可以播放很多次,但如果没有某种硬件支持,就不会有任何真正的进展。