QAtomicScopedValueRollback 类
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(std::atomic<T> &var, 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(QBasicAtomicInteger<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, 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() | |
void | commit() |
详细描述
QAtomicScopedValueRollback 类在析构时将原子变量重置为其先前值。它可以用于在抛出异常时撤销状态,而无需编写 try-catch 块。
它还可以用于管理临时设置的变量,例如嵌套性保护。使用此类可以确保变量将在函数正常退出、通过返回语句提前退出或通过异常退出的任何情况下被重置。
此类适用于 std::atomic 和 Qt 原子类:QBasicAtomicInteger、QAtomicInteger、QAtomicInt、QBasicAtomicPointer 和 QAtomicPointer。
使用 mo
的值指定对原子变量 var 的内存访问。内存顺序遵循以下映射
- 写入原子变量时
- 执行一个松弛的操作。
- 执行一个释放操作。
- 从原子变量中读取时
- 执行一个松弛的操作。
- 执行一个消费操作。
- 执行一个获取操作。
否则,默认的内存顺序是顺序一致的顺序。
注意:您永远不应该明确命名模板参数,而应独家使用类模板参数推导(CTAD),并让编译器选择模板参数。
注意:有可能其他线程也会修改该变量,这意味着您可能会在调用 QAtomicScopedValueRollback 构造函数与 commit() 或者在 commit() 与析构函数之间丢失其他线程的更新。
另请参阅:QScopedValueRollback.
成员函数文档
[默认 constructors]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, std::memory_order mo = std::memory_order_seq_cst)
[默认 constructors]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, std::memory_order mo = std::memory_order_seq_cst)
[默认 constructors]
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
调整。
[默认 constructors]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicInteger<T> &var, T value, std::memory_order mo = std::memory_order_seq_cst)
[默认 constructors]
QAtomicScopedValueRollback::QAtomicScopedValueRollback(QBasicAtomicPointer<std::remove_pointer_t<T>> &var, T value, std::memory_order mo = std::memory_order_seq_cst)
[默认 constructors]
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
的含义,请参阅 内存顺序。
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
的含义,请参阅 内存顺序。
© 2024 The Qt Company Ltd. 本文档中包含的文档贡献均为各自所有者的版权。提供的文档是根据自由软件基金会发布的GNU自由文档许可协议1.3版条款许可的。Qt及其相关标志是芬兰及/或其他国家/地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。