今天我在阅读有关同步的内容。读完 Peterson解决方案 后,我有点困惑,因为它是一种基于软件的解决方案。
现在我的问题是:什么是“基于软件的解决方案”?
强制互斥的另一种范例是使用信号量和监视器,它们是由操作系统和编程语言实现的机制。
基于软件的解决方案:
1) 基于软件的解决方案,指的是它们所依赖的硬件特性仅限于如果两个进程尝试将一个值存储在同一内存单元中,则硬件将保证最终值与其中一个写入的值相同,但关于顺序则没有任何保证。
2) 在软件解决方案中,我们无法保证变量在给定进程查看它和自身尝试更改它之间不会被更改。这是因为检查值和更改值通常需要两个或多个机器指令,并可能会有中断(在单处理器上)或来自另一个处理器的访问干扰。这增加了解决方案的复杂性。
基于硬件的解决方案:
1) 这里提供了特殊的硬件支持,以使执行的操作是原子的(作为单个操作)。
2) 许多处理器都有一条指令,可以在单个原子操作中测试和修改内存中的位置,以使在检查位置和修改位置之间没有其他操作可以干扰。例如,Intel IA32具有交换寄存器和内存位置的XCHG操作。