采用SMP(对称多处理)机器,其中包含两个单独的处理器。
这里,如果两个线程在两个不同的处理器上运行并共享一些数据。
这个共享数据被保存在两个不同处理器的缓存中,用于两个正在运行的线程。
因此,如果线程1(在第一个处理器中运行)更新其缓存中的共享数据的值,那么在第二个处理器上运行的线程将无法获取更新的数据?
这个问题是否正确? 这个问题是如何解决的?
答案 0 :(得分:1)
它通过缓存一致性硬件解决。
现代多核处理器使用复杂的缓存一致性协议。虽然理解这些协议的复杂性可能没有用,但理解它们背后的基本概念是非常有价值的。理解MESI protocol是一个很好的起点。
通常,在处理器可以对一块可缓存内存执行缓存写入之前,其缓存必须专门保存该内存。也就是说,没有其他处理器可以缓存它。
因此,如果第一个处理器写入内存区域,它将使用缓存间协议在其缓存中专门获取该内存。如果第二个处理器然后尝试读取该内存区域,它将无法在其缓存中找到它,并使用内部缓存协议与第一个处理器共享最新版本。
如果第二个处理器想要写入该内存区域,它将使用内部缓存协议使另一个处理器的缓存副本无效。这将迫使第一个处理器重新获取(可能已修改)版本,然后才能读取它。
实际细节可能因硬件细节而异。没有现代的多核CPU需要将数据写回主存储器以使其对其他核心可见。