gpt4 book ai didi

c++ - 我们是否需要为多线程 x32 系统使用锁来读取或写入 uint32_t 变量

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:54 24 4
gpt4 key购买 nike

我有一个问题:考虑一个 x32 系统,因此,对于 uint32_t 变量,系统是否以原子方式读取和写入它?也就是说,整个读或写操作可以在一个指令周期内完成。如果是这种情况,那么对于多线程 x32 系统,我们将不必使用锁来读取或写入 uint32_t 变量。请确认我的理解。

最佳答案

只有在汇编程序中编写代码并选择适当的指令时,它才是原子的。使用高级语言时,您无法控制将选择哪些指令。

如果你有一些像 a = b; 这样的 C 代码,那么生成的机器代码可能是“将 b 加载到寄存器 x”,“将寄存器 x 存储在 a 的内存位置”,这是不止一个指令。在这两者之间执行的中断或另一个线程如果使用相同的变量将意味着数据损坏。假设另一个线程向 a 写入不同的值 - 那么当返回到原始线程时,该更改将丢失。

因此您必须使用某种方式的保护机制,例如_Atomic 限定符、互斥锁或临界区。

关于c++ - 我们是否需要为多线程 x32 系统使用锁来读取或写入 uint32_t 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57391899/

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