gpt4 book ai didi

c - 在没有锁的情况下在 x86 机器上读/写一个 int

转载 作者:太空狗 更新时间:2023-10-29 15:49:30 25 4
gpt4 key购买 nike

假设在一个 C 程序中,我有 P 个线程在 32 位机器上运行,并且 int MAX——一个共享的 32 位整数

每个线程都可以读/写 MAX。

要求:线程读取的值不应被破坏,例如前 16 位和后 16 位不同步

问题:是否需要锁来保护读写?或者我可以安全地忽略锁,因为 LOAD/SAVE 汇编指令保证以原子方式发生吗?

最佳答案

当 int 正确对齐时,读取和写入是原子的。它不能跨越缓存行的末尾。缓存行为 64 字节。大多数编译器都确保对齐得到处理,但它可以被覆盖,比如结构打包编译指示。

是的,当线程执行读取-修改-写入操作时,您需要一个锁来保护值。也许您可以从 InterlockedXxxx 买到便宜的。

关于c - 在没有锁的情况下在 x86 机器上读/写一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414317/

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