首页 >后端开发 >C++ >C 整数读写在多线程环境中是原子的吗?

C 整数读写在多线程环境中是原子的吗?

Barbara Streisand
Barbara Streisand原创
2024-12-02 12:02:11748浏览

Are C   Integer Reads and Writes Atomic in Multithreaded Environments?

C 是否读写 Int 原子? [重复]

问题:

在一个线程更新而另一个线程读取整数的多线程应用程序中,是否有必要同步对此的访问多字节值?是否可以在完成之前中断部分写入,从而允许读取捕获不完整的值?

答案:

C 中整数读写的原子性取决于的架构上system.

详细信息:

  • 在 IA32 系统上:正确对齐的地址将具有原子读取和写入。未对齐的写入可能是原子的,具体取决于缓存。
  • 缓存:如果内存位于单个 L1 缓存行中,则写入是原子的。如果不是,则可能不是。
  • 总线宽度:数据总线的宽度影响原子性。在一些较旧的系统上,对未对齐地址的 16 位写入不是原子的,而在具有更宽总线的系统上则是原子的。
  • 编译器优化: 在 C/C 中,标记很重要共享值是易失性的,以防止优化器假设它永远不会在一次更新

结论:

是否需要同步取决于处理器架构、内存布局、编译器优化等因素。一般来说,建议同步对共享多字节值的访问,特别是在读写顺序相关的关键部分。

以上是C 整数读写在多线程环境中是原子的吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn