如果两个内核同时尝试写入主内存中的相同位置会发生什么?

时间:2013-03-29 16:37:36

标签: linux multithreading concurrency

如果两个不同的内核同时尝试写入主内存中的同一位置,会发生什么?主内存是否自动只允许一次一个地写入内存中的某个位置,或者是否必须进行某种昂贵的锁定?

(基本上我想知道写入原子volatile int的成本是多少,如果它影响了其他进程并且没有访问它的线程,例如,如果总线被锁定,它会影响一切,对吧? )

2 个答案:

答案 0 :(得分:1)

每个多核CPU都有一种方法可以确保每个核心的写入按先到先得的顺序排序。如果没有,你会遇到两个核心同时试图驱动内存总线的情况,这将导致烟雾被释放。

所以是的,锁定确实发生在电子级别,但它并不昂贵。这是相对复杂的,因为内存反映在缓存中,因此称为总线侦听的机制允许缓存发现另一个核心或外围设备何时更改其当前正在缓存的内存位置的内容。

因此,如果没有其他进程或核心使用相同的内存位置,那么它们的缓存将不会缓存它,因此您的读写将不受阻碍地发生。最初写入只会缓存,如果正在运行的进程在其他地方访问足够的内存以强制缓存刷新,它将只写入主内存。

答案 1 :(得分:0)

硬件只与内存有一个物理连接。它不能在同一时刻由两个不同的来源写入。它似乎会发生。

如果你尝试从两个进程/线程进行读取,然后写入,那么如果它们重叠,则会导致这种情况。使用原子操作的“mutex”实现了绕过它的方法。