이 페이지에서

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<T>는 소멸 시 T 형 원자 변수를 이전 값으로 재설정합니다. 이 함수는 예외가 발생했을 때 try-catch 블록을 작성할 필요 없이 상태를 되돌리는 데 사용할 수 있습니다.

또한 재진입 보호 조건(reentrancy guards)과 같이 일시적으로 설정된 변수를 관리하는 데에도 사용할 수 있습니다. 이 클래스를 사용하면 함수가 정상적으로 종료되든, return 문으로 조기에 종료되든, 예외로 인해 종료되든 상관없이 변수가 초기값으로 재설정됩니다.

이 클래스는 std::atomic 및 Qt 원자형 클래스(QBasicAtomicInteger, QAtomicInteger, QAtomicInt, QBasicAtomicPointer, QAtomicPointer)에서 작동합니다.

원자 변수 ` var `에 대한 메모리 액세스는 ` mo`의 값을 사용하여 지정됩니다. 메모리 순서는 다음 매핑을 따릅니다: `
`

  • 원자 변수에 쓰기 작업을 수행할 때는:
    • 어퀴어(acquire) 순서는 대신 릴랙스(relaxed) 연산을 수행합니다.
    • 하이브리드 어퀴어-릴리스 순서는 대신 릴리스 연산을 수행합니다.
  • 원자 변수에서 읽을 때:
    • 릴리스 순서는 대신 릴랙스된 연산을 수행합니다.
    • 소비 순서는 소비 연산을 수행합니다.
    • 하이브리드 획득-해제 순서는 대신 획득 연산을 수행합니다.


그렇지 않은 경우, 기본 메모리 순서는 순차적 일관성 순서입니다.

참고: 템플릿 인자를 명시적으로 명명해서는안 되며, 반드시 클래스 템플릿 인자 추론(CTAD)을 사용하여 컴파일러가 템플릿 인자를 선택하도록해야 합니다 .

참고: 다른 스레드도 해당 변수를 수정할가능성이 있으므로 , QAtomicScopedValueRollback 생성자 호출과 ` commit()` 호출 사이, 또는 ` commit()` 호출과 소멸자 호출 사이에 다른 스레드가 수행한 업데이트 내용이 손실될 수 있습니다.

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 를 참조하십시오.

© 2026 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.