gpt4 book ai didi

c++ - C++ 对 int 的读写是原子的吗?

转载 作者:IT老高 更新时间:2023-10-28 12:03:19 24 4
gpt4 key购买 nike

我有两个线程,一个更新一个 int,一个读取它。这是一个与读写顺序无关的统计值。

我的问题是,我是否需要同步访问这个多字节值?或者,换一种说法,可以部分写入完成并被中断,然后再进行读取。

例如,考虑一个值 = 0x0000FFFF,它的增量值为 0x00010000。

是否存在我应该担心的值看起来像 0x0001FFFF 的时间?当然,类型越大,发生这种情况的可能性就越大。

我一直同步这些类型的访问,但很好奇社区的想法。

最佳答案

男孩,这是什么问题。答案是:

Yes, no, hmmm, well, it depends

这一切都归结为系统的架构。在 IA32 上,正确对齐的地址将是原子操作。未对齐的写入可能是原子的,它取决于使用的缓存系统。如果内存位于单个 L1 缓存行中,则它是原子的,否则不是。 CPU 和 RAM 之间的总线宽度会影响原子性质:8086 上正确对齐的 16 位写入是原子性的,而 8088 上的相同写入则不是因为 8088 只有 8 位总线,而 8086 有16 位总线。

此外,如果您使用的是 C/C++,请不要忘记将共享值标记为 volatile,否则优化器会认为该变量永远不会在您的某个线程中更新。

关于c++ - C++ 对 int 的读写是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54188/

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