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ブロックを記述することなく、例外がスローされたときに状態を戻すために使用できます。
また、リエントランシー・ガードのように、一時的にセットされた変数を管理するためにも使用できます。このクラスを使うと、関数が正常終了しても、return文で早期終了しても、例外で終了しても、変数はリセットされます。
このクラスはstd::atomicとQt atomicクラスで動作します:QBasicAtomicInteger、QAtomicInteger 、QAtomicInt 、QBasicAtomicPointer、QAtomicPointer 。
アトミック変数var へのメモリ・アクセスは、mo
の値を使用して指定されます。 メモリの順序は、このマッピングに従います:
- アトミック変数への書き込み時:
- acquire順序は、代わりにrelax操作を実行する。
- acquire-releaseハイブリッド順序は、代わりにrelease操作を実行する。
- アトミック変数から読み出すとき:
- release順序が代わりにrelaxed操作を実行する。
- consume命令はconsume操作を実行します。
- acquire-releaseのハイブリッド順序は、代わりにacquire操作を実行します。
それ以外の場合、デフォルトのメモリ順序は逐次一貫順序です。
注: テンプレート引数に明示的に名前を付けてはいけません。もっぱらCTAD(Class Template Argument Deduction)を使用し、コンパイラにテンプレート引数を選択させます。
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.