QAtomicScopedValueRollback Class
template <typename T> class QAtomicScopedValueRollbackアトミック変数用のQScopedValueRollback を提供します。さらに...
Header: | #include <QAtomicScopedValueRollback> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Since: | 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 を参照のこと。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。