假设在一个 C 程序中,我有 P 个线程在 32 位机器上运行,并且 int MAX
——一个共享的 32 位整数
每个线程都可以读/写 MAX。
要求:线程读取的值不应被破坏,例如前 16 位和后 16 位不同步
问题:是否需要锁来保护读写?或者我可以安全地忽略锁,因为 LOAD/SAVE 汇编指令保证以原子方式发生吗?
最佳答案
当 int 正确对齐时,读取和写入是原子的。它不能跨越缓存行的末尾。缓存行为 64 字节。大多数编译器都确保对齐得到处理,但它可以被覆盖,比如结构打包编译指示。
是的,当线程执行读取-修改-写入操作时,您需要一个锁来保护值。也许您可以从 InterlockedXxxx 买到便宜的。
关于c - 在没有锁的情况下在 x86 机器上读/写一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414317/