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

Can multiple threads access shared memory at the same time?

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

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

如果共享内存区域足够小以致于在每个核心的私有缓存中都很热,那么每个核心都可以以非常高的速度从中读取。写作会减慢其他读者的速度,尤其是。其他作家 (cf. ).

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