【发布时间】:2014-09-26 20:14:09
【问题描述】:
这是用软件编写的测试和设置:
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 中使用该机制吗?如果是,如何保证原子性?
【问题讨论】:
-
有编程的同步算法(不是测试和设置,但您仍然可以设置可靠的互锁),例如 Dekker 算法,它仅依赖于内存读取和写入的原子性。如果没有这样的读写原子性,很难看到如何编写任何类型的自旋循环等待另一个进程完成;您永远无法相信您正在检查的处理器完整标志是可靠的。
-
关于 Dekker 算法:您需要了解可能破坏算法的硬件机制。例如。 IBM-370 上的读写顺序。
标签: c operating-system synchronization mutual-exclusion