我在Visual C++文档中读到,多个线程从同一对象读取是安全的。
我的问题是:具有多个核心的X86-64 CPU如何处理这个问题?
假设你有一个1 MB的内存块。不同的线程是否真正能够同时读取完全相同的数据,或者核心每次只能读取一个字,并且只允许一个核心读取特定的字?
我在Visual C++文档中读到,多个线程从同一对象读取是安全的。
我的问题是:具有多个核心的X86-64 CPU如何处理这个问题?
假设你有一个1 MB的内存块。不同的线程是否真正能够同时读取完全相同的数据,或者核心每次只能读取一个字,并且只允许一个核心读取特定的字?
仅作澄清,正如评论中所说,由于x86和x64架构实现单总线,因此无法同时访问RAM,而SMP保证了公平访问主内存。尽管如此,每个核心缓存都隐藏了这种情况,使得每个核心都可以拥有自己的数据副本。对于1MB的数据,当核心更新其缓存时可能会导致一些竞争,但那是微不足道的。
一些有用的链接: