Implementing Atomic Operations
Qt 对许多值类使用一种称为 隐式共享 的优化.
从 Qt 4 开始, Qt 的所有隐式共享类都可以像任何其他值类一样跨线程安全地复制, 即., 它们是完全 可重入的. 这是通过在 Qt 支持的所有不同平台上使用原子硬件指令实现引用计数操作来实现的.
为了支持新的架构, 重要的是要确保这些特定于平台的原子操作在相应的头文件 (qatomic_ARCH.h
) 中实现, 并且该文件位于 Qt 的 src/corelib/arch
目录中. 例如, Intel 80386 实现位于 src/corelib/arch/qatomic_i386.h
.
目前, Qt 提供了两个类 (QAtomicInt 和 QAtomicPointer), 支持多种原子操作. 这些类分别继承自 QBasicAtomicInt 和 QBasicAtomicPointer.
将 Qt 移植到新架构时, 必须实现 QBasicAtomicInt 和 QBasicAtomicPointer, 而非 QAtomicInt 和 QAtomicPointer. 前面的类没有构造函数, 这使得它们成为 POD (plain-old-data). 这两个类都只有一个名为 _q_value
的成员变量, 用于存储值. 这是所有原子操作读取和修改的值.
你必须实现 QAtomicInt 和 QAtomicPointer API 文档中提到的所有成员函数. 注意, 这些类中原子操作的实现对于中断和多核处理器而言必须是原子的.
警告: 本文档中提到的 QBasicAtomicInt 和 QBasicAtomicPointer 由 Qt 内部使用, 不属于公共 API 的一部分. 它们可能会在 Qt 的未来版本中发生变化. 本文档的目的是帮助有兴趣将 Qt 移植到新架构的人们.