再说一次关于无锁的事情......
假设我实现了一个简单的基于数组的整数循环 FIFO。FIFO 由 2 个线程单生产者、单消费者访问。读取和写入索引始终在访问项目后更新。在单个 CPU 上,这将是安全的(假设索引的更新操作是原子的),因为只有一个线程具有对索引的写访问权限。在 SMP 机器上,这可能会导致问题,因为两个 CPU 可能会由于其缓存和重新排序而看到不同的索引表示。
QT 具有跨平台原子变量,它们也实现了内存栅栏,使用 QAtomicInt 会使 fifo 实现 SMP 安全还是我忽略了什么?