QAtomicScopedValueRollback Class
template <typename T> class QAtomicScopedValueRollback为原子变量提供QScopedValueRollback 。更多
头文件: | #include <QAtomicScopedValueRollback> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
自 | Qt 6.7 |
公共函数
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, std::memory_order mo = std::memory_order_seq_cst) | |
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, std::memory_order mo = std::memory_order_seq_cst) | |
QAtomicScopedValueRollback(std::atomic<T> &var, std::memory_order mo = std::memory_order_seq_cst) | |
QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, T value, std::memory_order mo = std::memory_order_seq_cst) | |
QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, T value, std::memory_order mo = std::memory_order_seq_cst) | |
QAtomicScopedValueRollback(std::atomic<T> &var, T value, std::memory_order mo = std::memory_order_seq_cst) | |
~QAtomicScopedValueRollback() | |
void | commit() |
详细说明
QAtomicScopedValueRollback 类可在原子变量销毁时将其重置为之前的值。当异常抛出时,该类可用于恢复状态,而无需编写 try-catch 块。
它还可用于管理临时设置的变量,例如重入性保护。使用该类后,无论函数是正常退出、通过返回语句提前退出还是通过异常退出,变量都将被重置。
该类适用于 std::atomic 和 Qt 原子类:QBasicAtomicInteger,QAtomicInteger,QAtomicInt, QBasicAtomicPointer 和QAtomicPointer 。
对原子变量var 的内存访问使用mo
的值指定。内存顺序遵循此映射:
- 在写入原子变量时,获取排序执行放松操作:
- 获取排序执行放松操作。
- 获取-释放混合排序执行释放操作。
- 从原子变量读取数据时:
- 释放排序执行放松操作。
- 消耗排序执行消耗操作。
- 混合获取-释放排序执行获取操作。
否则,默认内存顺序是顺序一致排序。
注意: 切勿明确命名模板参数,而应专门使用类模板参数演绎法(CTAD),让编译器选择模板参数。
另请参阅 QScopedValueRollback 。
成员函数文档
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, std::memory_order mo = std::memory_order_seq_cst)
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, std::memory_order mo = std::memory_order_seq_cst)
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(std::atomic<T> &var, std::memory_order mo = std::memory_order_seq_cst)
记录var 的值,以便在销毁时恢复。
这相当于
T old_value = var.load(mo); // And in the destructor: var.store(old_value, mo);
mo
负载调整见Memory Order 部分。
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, T value, std::memory_order mo = std::memory_order_seq_cst)
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, T value, std::memory_order mo = std::memory_order_seq_cst)
[explicit constexpr]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(std::atomic<T> &var, T value, std::memory_order mo = std::memory_order_seq_cst)
将value 赋值给var ,并在内部存储var 的先前值,以便销毁时还原。
这相当于
T old_value = var.exchange(new_value, mo); // And in the destructor: var.store(old_value, mo);
QAtomicScopedValueRollback::~QAtomicScopedValueRollback()
将构造时或最后一次调用commit() 时的存储值恢复到托管变量。
这相当于
// In the constructor: T old_value = var.load(mo); // or: T old_value = exchange(new_value, mo); var.store(old_value, mo);
其中mo
与最初传递给构造函数的值相同。mo
的含义参见Memory Order 。
void QAtomicScopedValueRollback::commit()
将存储值更新为托管变量的当前值,加载顺序与创建时相同。
销毁时将恢复更新后的值,而不是原来的值。
这相当于
// Given constructor: T old_value = var.load(mo); old_value = var.load(mo); // referesh it // And, in the destructor: var.store(old_value, mo);
其中mo
与最初传递给构造函数的值相同。mo
的含义请参见Memory Order 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.