我正在研究Silberschatz,Galvin和Gagne的Operating System Concepts操作系统。
在第229页,该书说明了Petersons Solution:
由于现代计算机体系结构执行基本机器的方式 语言指令,如加载和存储,没有任何保证 彼得森的解决方案将在这种架构上正常运行。
我在Wikipedia上查了一下,发现这似乎最接近一个解释:
大多数现代CPU重新排序内存访问以提高执行效率。这样的处理器总是提供某种方式来强制在存储器访问流中进行排序,通常是通过存储器屏障指令。在对存储器访问重新排序的处理器上实现Peterson和相关算法通常需要使用这些操作来正确地工作以使顺序操作不以错误的顺序发生。请注意,即使在不重新排序指令的处理器上也可能发生内存访问的重新排序
我无法理解这意味着什么,或者甚至是答案。
那么,为什么Peterson的解决方案无法保证在现代架构上工作呢?
答案 0 :(得分:2)
在具有一个CPU的系统上,Peterson的算法可以保证正常工作,因为程序自身的行为是按程序顺序观察的。
在具有多个CPU的系统上,算法可能无法工作,因为在一个CPU上发生的事件的程序顺序在另一个CPU上可能会有不同的感知。
这可能会导致提前进入关键部分(当它仍在被另一个线程使用时)并提前退出关键部分(当共享资源的工作尚未完成时)。
出于这个原因,需要确保在CPU内部发生的事件顺序在外部是相同的。内存障碍可以确保这种序列化。