假设在一个 C 程序中,我有 P 个线程在 32 位机器上运行,并且int MAX
--共享 32 位整数
每个线程都可以读/写 MAX。
要求:线程读取的值不应被损坏,例如前 16 位和最后 16 位不同步
问题:我需要一个锁来保护读写吗?或者我可以安全地忽略锁,因为 LOAD/SAVE 汇编指令保证以原子方式发生?
当 int 正确对齐时,读取和写入是原子的。它不能跨越缓存行的末尾。一个缓存行是 64 字节。大多数编译器都会确保对齐,但它可以被结构打包编译指示等覆盖。
是的,当线程执行读取-修改-写入操作时,您需要一个锁来保护该值。也许你可以从 InterlockedXxxx 买到便宜的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)