当两个线程由两个处理器处理,尝试同时访问堆中的单个资源时会发生什么?



当两个处理器处理的两个独立线程同时访问堆中的相同属性时会发生什么情况。它犯错还是不犯错?

这一切都发生在微电子层面。从本质上讲,两个处理器中的缓存子系统必须相互协商,以决定哪个(如果有的话)拥有资源的最新副本,或者从具有该资源的处理器的DRAM中获取资源。在英特尔架构上,这发生在称为QPI的芯片间网络上,在AMD架构上,它是Hypertransport(现在可能有一个更新的名称)。基本上这两种架构都是NUMA - 并非所有处理器都可以直接访问DRAM - 但QPI/Hypertransport合成了SMP架构 - 假装所有DRAM都可以由所有处理器直接访问。这就是您的软件/操作系统运行时的体验。

QPI和Hypertransport非常复杂,软件不可见。

最新更新