多个线程可以同时访问共享内存吗?

v1c*_*t0r 2 multithreading cpu-architecture shared-memory hardware-acceleration

多个线程在 CPU 的多个核心上并行运行。他们可以同时访问主存储器吗?

Pet*_*des 5

主内存和共享的末级缓存读取带宽是多个内核竞争的共享资源,但是,读取同一字节内存的多个读取器通常比多个读取器从单独的页面读取数据更快地完成。(混合写入则不然。)

如果共享内存区域足够小,以至于在每个核心的私有缓存中都很热,那么每个核心都可以以非常高的速度从中读取数据。写作会减慢其他读者的速度,尤其是。其他作者(参见cache-line-ping-pong和false共享是否相同?)。

其他读者如果不使用任何类型的锁定,而是依靠无锁算法来避免由于竞争条件而导致的错误,那么速度不会太慢。这就是为什么与仅使用锁定或生产者-消费者标志相比,无锁编程有时值得(巨大的)挑战来使其正确。

  • @SergeyA:我也是:P 这是一个有适度有趣答案的问题,所以我回答了它。如果人们提出他们无法理解答案的问题,那不是我的问题。他们可以通过谷歌搜索这些短语来开始了解更多信息。[x86 tag wiki](http://stackoverflow.com/tags/x86/info) 上有更多我没有包含的好链接。我认为这比仅仅回答“是的,完整的答案真的很复杂”要好,因为这个问题足够具体,可以有一个简短的答案。(它不包括任何有关同步或内存排序的内容。) (3认同)