对内存的并发READ / WRITE访问是否会导致错误/违规?

时间:2011-07-01 19:12:20

标签: windows concurrency x86 x86-64

如果我有一个多处理器设置和两个访问相同内存的线程(让我们说相同的实际字节或字,而不仅仅是“相同的区域”),这是否会导致错误?

如果两个线程不仅读取,而且还写入并组合读取和写入(例如,线程1尝试在线程2尝试写入的同时读取,或者两者都试图在同一时间写入,该怎么办?时间)。这会导致错误/ BSOD / AV,还是行为未定义的唯一问题? (其中一个线程将获取错误数据,具体取决于实际时间)

1 个答案:

答案 0 :(得分:0)

1)不,线程可以在程序应用程序内存中随处读/写。 (好吧,可以保护内存的某些部分,比如程序代码内存来保护它。)

2)任何CPU内核都有自己的缓存,数据首先被复制,然后在高速缓存行中被修改,然后以适当的(不可预测的)时间复制回RAM。有一些特殊的cpu指令(如锁)必须与其他指令(如cmpxchg)一起执行,以确保原子(interlocked)RAM读,写或修改,默认情况下某些指令是原子的。

请记住:原子(互锁)RAM访问只能是1,2,4或8(以及16位64位CPU)字节长。 对于更长的内存结构,您必须确保相应的锁定(sinhronisation)机制,如Critical Section,以避免多个线程无法控制内存访问。