gpt4 book ai didi

c++ - 使用 QAtomicInt 作为内存栅栏

转载 作者:行者123 更新时间:2023-11-28 07:45:23 24 4
gpt4 key购买 nike

又是关于无锁的……

假设我实现了一个简单的基于数组的整数循环 FIFO。 FIFO 由 2 个线程单生产者、单消费者访问。读取和写入索引始终在访问项目后更新。在单个 CPU 上,这将是安全的(假设索引的更新操作是原子的),因为只有一个线程具有对索引的写访问权。在 SMP 机器上,这可能会导致问题,因为两个 CPU 可能会因为缓存和重新排序而看到不同的索引表示。

QT 具有跨平台原子变量,它也实现了内存栅栏,使用 QAtomicInt 会使 fifo 实现 SMP 安全还是我忽略了什么?

最佳答案

这将是安全的,前提是您的其余实现是合理的。

正如您提到的,QAtomicInt 实现了 memory fences防止指令重新排序,这也加强了处理器之间的缓存一致性(事实上,x86 和 x86_64 处理器的缓存无论如何都是一致的,尽管一致性协议(protocol)可能导致流水线停顿并降低性能,如果你依赖它紧密循环)。

关于c++ - 使用 QAtomicInt 作为内存栅栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14989048/

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