有人提到过,例如c ++,当在一个线程中写入并在第二个线程中读取同一对象时会发生什么?(是否安全?)如果两个线程在没有原子和锁的情况下对同一个变量进行操作,则读取该变量既不会返回旧值,也不会返回新值。
我不明白为什么会发生这种情况,我找不到这样的例子,我认为加载和存储始终是一条不会被中断的指令,那么为什么会发生这种情况?
例如,C可以在仅支持对内存的16位访问的硬件上实现。在这种情况下,加载或存储32位整数需要两条加载或存储指令。执行这两个指令的线程可能在它们的执行之间被中断,另一个线程可能会在第一个线程恢复之前执行。如果其他线程加载,则可能加载一个新零件和一个旧零件。如果存储了,它可能会存储两个部分,并且第一个线程在恢复时将看到一个旧部分和一个新部分。其他此类混合也是可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句