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

标签 c concurrency

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

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

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

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

最佳答案

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

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

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

相关文章:

java - 为什么 Executors.newCachedThreadPool 在提交期间抛出 java.util.concurrent.RejectedExecutionException

.net - 使用任务并行库一次仅处理 n 个项目

c - fork() 和地址空间

java - Netty Comet 异步请求超时

c - 已分配动态数组,但不能使用它

c - 如何使用 C 中的文件描述符将数字(int,double)写入文件?

Java:在此示例中防止死锁

mysql - MySQL中的触发器和表锁

c++ - 如何使用静态变量来记住最后传递的参数

c - strcmp() 来自标准输入的字符串和来自文件的字符串