gpt4 book ai didi

c - 为什么读取由其他线程修改的变量既不是旧值也不是新值

转载 作者:行者123 更新时间:2023-12-03 13:15:11 24 4
gpt4 key购买 nike

有人提到过它,例如在这里c++ what happens when in one thread write and in second read the same object? (is it safe?)
如果两个线程在没有原子和锁的情况下对同一个变量进行操作,则读取该变量既不会返回旧值,也不会返回新值。
我不明白为什么会发生这种情况,而且我找不到一个发生这种情况的例子,我认为加载和存储始终是一条不会被中断的指令,那么为什么会发生这种情况呢?

最佳答案

例如,C可以在仅支持对内存的16位访问的硬件上实现。在这种情况下,加载或存储32位整数需要两条加载或存储指令。执行这两个指令的线程可能在它们的执行之间被中断,另一个线程可能会在第一个线程恢复之前执行。如果其他线程加载,则可能会加载一个新零件和一个旧零件。如果存储了,它可能会存储两个部分,并且第一个线程在恢复时将看到一个旧部分和一个新部分。和其他这样的混合是可能的。

关于c - 为什么读取由其他线程修改的变量既不是旧值也不是新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com