QAtomicInteger Class
template <typename T> class QAtomicIntegerQAtomicInteger 클래스는 정수에 대한 플랫폼 독립적인 원자 연산을 제공합니다. 더 보기...
Header: | #include <QAtomicInteger> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
상속 대상: |
- 상속된 멤버를 포함한 모든 멤버 목록
- QAtomicInteger는 스레딩 클래스의 일부입니다.
공용 함수
QAtomicInteger(T value = 0) | |
QAtomicInteger(const QAtomicInteger<T> &other) | |
bool | deref() |
T | fetchAndAddAcquire(T valueToAdd) |
T | fetchAndAddOrdered(T valueToAdd) |
T | fetchAndAddRelaxed(T valueToAdd) |
T | fetchAndAddRelease(T valueToAdd) |
T | fetchAndAndAcquire(T valueToAnd) |
T | fetchAndAndOrdered(T valueToAnd) |
T | fetchAndAndRelaxed(T valueToAnd) |
T | fetchAndAndRelease(T valueToAnd) |
T | fetchAndOrAcquire(T valueToOr) |
T | fetchAndOrOrdered(T valueToOr) |
T | fetchAndOrRelaxed(T valueToOr) |
T | fetchAndOrRelease(T valueToOr) |
T | fetchAndStoreAcquire(T newValue) |
T | fetchAndStoreOrdered(T newValue) |
T | fetchAndStoreRelaxed(T newValue) |
T | fetchAndStoreRelease(T newValue) |
T | fetchAndSubAcquire(T valueToSub) |
T | fetchAndSubOrdered(T valueToSub) |
T | fetchAndSubRelaxed(T valueToSub) |
T | fetchAndSubRelease(T valueToSub) |
T | fetchAndXorAcquire(T valueToXor) |
T | fetchAndXorOrdered(T valueToXor) |
T | fetchAndXorRelaxed(T valueToXor) |
T | fetchAndXorRelease(T valueToXor) |
T | loadAcquire() const |
T | loadRelaxed() const |
bool | ref() |
void | storeRelaxed(T newValue) |
void | storeRelease(T newValue) |
bool | testAndSetAcquire(T expectedValue, T newValue) |
bool | testAndSetAcquire(T expectedValue, T newValue, T ¤tValue) |
bool | testAndSetOrdered(T expectedValue, T newValue) |
bool | testAndSetOrdered(T expectedValue, T newValue, T ¤tValue) |
bool | testAndSetRelaxed(T expectedValue, T newValue) |
bool | testAndSetRelaxed(T expectedValue, T newValue, T ¤tValue) |
bool | testAndSetRelease(T expectedValue, T newValue) |
bool | testAndSetRelease(T expectedValue, T newValue, T ¤tValue) |
T | operator T() const |
T | operator&=(T value) |
T | operator++() |
T | operator++(int) |
T | operator+=(T value) |
T | operator--() |
T | operator--(int) |
T | operator-=(T value) |
QAtomicInteger<T> & | operator=(T) |
QAtomicInteger<T> & | operator=(const QAtomicInteger<T> &other) |
T | operator^=(T value) |
T | operator|=(T value) |
정적 공용 멤버
bool | isFetchAndAddNative() |
bool | isFetchAndAddWaitFree() |
bool | isFetchAndStoreNative() |
bool | isFetchAndStoreWaitFree() |
bool | isReferenceCountingNative() |
bool | isReferenceCountingWaitFree() |
bool | isTestAndSetNative() |
bool | isTestAndSetWaitFree() |
관련 비회원
(since 6.7) void | qYieldCpu() |
매크로
상세 설명
포인터에 대한 원자 연산에 대해서는 QAtomicPointer 클래스를 참조하세요.
원자 연산은 중단 없이 완료되는 복잡한 연산입니다. QAtomicInteger 클래스는 정수에 대한 원자 참조 계수, 테스트 및 설정, 가져오기 및 저장, 가져오기 및 추가 기능을 제공합니다.
템플릿 매개변수 T
는 C++ 정수 유형이어야 합니다:
- 8비트: 부울, 문자, 부호 있는 문자, 부호 없는 문자, qint8, quint8, char8_t(C++20)
- 16비트: 쇼트, 부호 없는 쇼트, qint16, quint16, char16_t
- 32비트: int, 부호 없는 int, qint32, quint32, char32_t
- 64비트: 롱 롱, 부호 없는 롱 롱, qint64, quint64
- 플랫폼별 크기: 긴, 부호 없는 긴
- 포인터 크기: 퀸트트립, 퀸트트립, 퀸트디프
위 목록 중 8비트, 16비트, 32비트 및 포인터 크기의 인스턴스화만 모든 플랫폼에서 작동이 보장됩니다. 다른 크기에 대한 지원은 코드가 컴파일되는 컴파일러 및 프로세서 아키텍처에 따라 다릅니다. 32비트 플랫폼에서 64비트 유형이 지원되는지 테스트하려면 Q_ATOMIC_INT64_IS_SUPPORTED
매크로를 확인하세요.
Atomic API
참조 카운팅
ref() 및 deref() 함수는 효율적인 참조 카운팅 API를 제공합니다. 이 함수의 반환 값은 마지막 참조가 언제 해제되었는지를 나타내는 데 사용됩니다. 이 함수를 사용하면 암시적으로 공유되는 자신만의 클래스를 구현할 수 있습니다.
MySharedType &MySharedType::operator=(const MySharedType &other) { (void) other.data->atomicInt.ref(); if (!data->atomicInt.deref()) { // The last reference has been released delete d; } d = other.d; return *this; }
메모리 순서 지정
QAtomicInteger는 원자 테스트 및 설정, 가져오기 및 저장, 가져오기 및 추가 함수에 대한 여러 가지 구현을 제공합니다. 각 구현은 원자 명령어를 둘러싼 메모리 액세스가 프로세서에 의해 실행되는 방식을 설명하는 메모리 순서 시맨틱을 정의합니다. 많은 최신 아키텍처는 순서를 벗어난 실행과 메모리 순서를 허용하므로 애플리케이션이 모든 프로세서에서 제대로 작동하려면 올바른 시맨틱을 사용해야 합니다.
- Relaxed - 메모리 순서가 지정되지 않아 컴파일러와 프로세서가 메모리 액세스를 자유롭게 재지정할 수 있습니다.
- 획득 - 원자 연산(프로그램 순서)에 따른 메모리 액세스는 원자 연산 전에 순서를 변경할 수 없습니다.
- 릴리스 - 원자 연산 이전의 메모리 액세스(프로그램 순서)는 원자 연산 이후에 다시 순서를 바꿀 수 없습니다.
- 정렬됨 - 동일한 획득 및 해제 시맨틱이 결합되었습니다.
테스트 및 설정
QAtomicInteger의 현재 값이 예상 값인 경우, test-and-set 함수는 QAtomicInteger에 새 값을 할당하고 참을 반환합니다. 값이 not 같으면 이 함수는 아무 작업도 수행하지 않고 false를 반환합니다. 이 작업은 다음 코드와 동일합니다:
if (currentValue == expectedValue) { currentValue = newValue; return true; } return false;
testAndSetRelaxed(), testAndSetAcquire(), testAndSetRelease(), testAndSetOrdered() 등 4개의 테스트 및 설정 함수가 있습니다. 다양한 메모리 순서 지정 의미에 대한 설명은 위를 참조하세요.
가져오기 및 저장
원자 가져오기 및 저장 함수는 QAtomicInteger의 현재 값을 읽은 다음 새 값을 할당하여 원래 값을 반환합니다. 이 작업은 다음 코드와 동일합니다:
int originalValue = currentValue; currentValue = newValue; return originalValue;
fetchAndStoreRelaxed(), fetchAndStoreAcquire(), fetchAndStoreRelease(), fetchAndStoreOrdered() 등 4개의 가져오기 및 저장 함수가 있습니다. 다양한 메모리 순서 지정 의미에 대한 설명은 위를 참조하세요.
가져오기 및 추가
원자 가져오기 및 추가 함수는 QAtomicInteger의 현재 값을 읽은 다음 주어진 값을 현재 값에 더하여 원래 값을 반환합니다. 이 연산은 다음 코드와 동일합니다:
int originalValue = currentValue; currentValue += valueToAdd; return originalValue;
fetchAndAddRelaxed(), fetchAndAddAcquire(), fetchAndAddRelease(), fetchAndAddOrdered() 등 4개의 가져오기 및 추가 함수가 있습니다. 다양한 메모리 순서 지정 의미에 대한 설명은 위를 참조하세요.
Atomic API 기능 테스트
모든 프로세서에서 작동하는 플랫폼 독립적인 원자 API를 제공하는 것은 어려운 일입니다. QAtomicInteger에서 제공하는 API는 모든 프로세서에서 원자적으로 작동하도록 보장됩니다. 그러나 모든 프로세서가 QAtomicInteger에서 제공하는 모든 연산을 지원하는 것은 아니므로 프로세서에 대한 정보를 노출할 필요가 있습니다.
컴파일 시 다양한 매크로를 사용하여 하드웨어에서 어떤 기능이 지원되는지 확인할 수 있습니다. 이를 통해 하드웨어가 특정 작업을 항상 지원하는지, 가끔 지원하는지, 지원하지 않는지 알 수 있습니다. 매크로의 형식은 Q_ATOMIC_INTnn_OPERATION_IS_HOW_NATIVE입니다. nn은 정수 크기(비트 단위), OPERATION은 REFERENCE_COUNTING, TEST_AND_SET, FETCH_AND_STORE, FETCH_AND_ADD 중 하나, HOW는 ALWAYS, SOMETIMES, NOT 중 하나입니다. 연산당 항상 정확히 하나의 매크로가 정의됩니다. 예를 들어, Q_ATOMIC_INT32_REFERENCE_COUNTING_IS_ALWAYS_NATIVE가 정의된 경우, Q_ATOMIC_INT_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE나 Q_ATOMIC_INT32_REFERENCE_COUNTING_IS_NOT_NATIVE는 정의되지 않습니다.
상수 시간 내에 완료되는 연산을 대기 시간이 없는 연산이라고 합니다. 이러한 연산은 어떤 종류의 잠금이나 루프를 사용하여 구현되지 않습니다. 항상 지원되고 대기 없는 원자 연산의 경우, Qt는 Q_ATOMIC_INTnn_OPERATION_IS_WAIT_FREE와 함께 Q_ATOMIC_INTnn_OPERATION_IS_ALWAYS_NATIVE를 정의합니다.
원자 연산이 최신 세대의 프로세서에서만 지원되는 경우, QAtomicInteger는 isReferenceCountingNative(), isTestAndSetNative(), isFetchAndStoreNative(), isFetchAndAddNative() 함수를 사용하여 하드웨어가 지원하는 것을 런타임에 확인할 수 있는 방법도 제공합니다. 대기 없는 구현은 isReferenceCountingWaitFree(), isTestAndSetWaitFree(), isFetchAndStoreWaitFree() 및 isFetchAndAddWaitFree() 함수를 사용하여 감지할 수 있습니다.
아래는 QAtomicInteger에 대한 모든 기능 매크로의 전체 목록입니다:
- Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
- Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE
- Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE
- Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE
- Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE
- Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE
- Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE
- Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE
- Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_WAIT_FREE
- Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE
- Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_WAIT_FREE
이전 버전의 Qt와의 호환성을 위해 nn이 비어 있는 매크로는 32비트 매크로와 동일합니다. 예를 들어, Q_ATOMIC_INT_REFERENCE_COUNTING_IS_WAIT_FREE는 Q_ATOMIC_INT32_REFERENCE_COUNTING_IS_WAIT_FREE와 동일합니다.
QAtomicPointer 를참조하십시오 .
멤버 함수 문서
[constexpr noexcept]
QAtomicInteger::QAtomicInteger(T value = 0)
주어진 value 로 QAtomicInteger 를 구축합니다.
[noexcept]
QAtomicInteger::QAtomicInteger(const QAtomicInteger<T> &other)
other 의 복사본을 생성합니다.
bool QAtomicInteger::deref()
이 값을 원자적으로 감소시킵니다 QAtomicInteger. 새 값이 0이 아닌 경우 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
ref() 및 operator--()도 참조하세요 .
T QAtomicInteger::fetchAndAddAcquire(T valueToAdd)
원자 가져오기 및 추가.
QAtomicInteger 의 현재 값을 읽은 다음 valueToAdd 을 현재 값에 더하여 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 이전에 다시 정렬되지 않도록 합니다.
operator+=() 및 fetchAndSubAcquire()도 참조하세요 .
T QAtomicInteger::fetchAndAddOrdered(T valueToAdd)
원자 가져오기 및 추가.
QAtomicInteger 의 현재 값을 읽은 다음 valueToAdd 을 현재 값에 더하여 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
operator+=() 및 fetchAndSubOrdered()도 참조하세요 .
T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd)
원자 가져오기 및 추가.
QAtomicInteger 의 현재 값을 읽은 다음 valueToAdd 을 현재 값에 더하여 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
operator+=() 및 fetchAndSubRelaxed()도 참조하세요 .
T QAtomicInteger::fetchAndAddRelease(T valueToAdd)
원자 가져오기 및 추가.
QAtomicInteger 의 현재 값을 읽은 다음 valueToAdd 을 현재 값에 더하여 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
operator+=() 및 fetchAndSubRelease()도 참조하세요 .
T QAtomicInteger::fetchAndAndAcquire(T valueToAnd)
원자 가져오기-and-and.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToAnd 을 현재 값에 비트 단위로 AND하여 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 이전에 다시 정렬되지 않도록 합니다.
operator&=()도 참조하세요 .
T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)
원자 가져오기-and-and.
QAtomicInteger 의 현재 값을 읽은 다음 valueToAnd 을 현재 값에 비트 단위로 AND하여 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
operator&=()도 참조하세요 .
T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)
원자 가져오기-and-and.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToAnd 을 현재 값에 비트 단위로 AND하여 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
operator&=()도 참조하세요 .
T QAtomicInteger::fetchAndAndRelease(T valueToAnd)
원자 가져오기-and-and.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToAnd 을 현재 값에 비트 단위로 AND하여 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
operator&=()도 참조하세요 .
T QAtomicInteger::fetchAndOrAcquire(T valueToOr)
원자 가져오기 및 또는.
이 QAtomicInteger 의 현재 값을 읽은 다음 현재 값에 비트 단위로-OR valueToOr 하여 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 이전에 다시 정렬되지 않도록 보장합니다.
operator|=()도 참조하세요 .
T QAtomicInteger::fetchAndOrOrdered(T valueToOr)
원자 가져오기 및 또는.
QAtomicInteger 의 현재 값을 읽은 다음 valueToOr 을 현재 값에 비트 단위로 OR하여 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
operator|=()도 참조하세요 .
T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)
원자 가져오기 및 또는.
QAtomicInteger 의 현재 값을 읽은 다음 valueToOr 을 현재 값에 비트 단위로 OR하여 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
operator|=()도 참조하세요 .
T QAtomicInteger::fetchAndOrRelease(T valueToOr)
원자 가져오기 및 또는.
QAtomicInteger 의 현재 값을 읽은 다음 valueToOr 을 현재 값에 비트 단위로 OR하여 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
operator|=()도 참조하세요 .
T QAtomicInteger::fetchAndStoreAcquire(T newValue)
원자 가져오기 및 저장.
이 QAtomicInteger 의 현재 값을 읽은 다음 newValue 에 할당하여 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 전에 다시 정렬되지 않도록 합니다.
T QAtomicInteger::fetchAndStoreOrdered(T newValue)
원자 가져오기 및 저장.
이 QAtomicInteger 의 현재 값을 읽은 다음 newValue 에 할당하여 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서대로)가 다시 정렬되지 않을 수 있습니다.
T QAtomicInteger::fetchAndStoreRelaxed(T newValue)
원자 가져오기 및 저장.
QAtomicInteger 의 현재 값을 읽은 다음 newValue 에 할당하여 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
T QAtomicInteger::fetchAndStoreRelease(T newValue)
원자 가져오기 및 저장.
이 QAtomicInteger 의 현재 값을 읽은 다음 newValue 에 할당하여 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
T QAtomicInteger::fetchAndSubAcquire(T valueToSub)
원자 가져오기-내보내기.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToSub 을 현재 값에서 빼서 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 이전에 다시 정렬되지 않도록 합니다.
operator-=() 및 fetchAndAddAcquire()도 참조하세요 .
T QAtomicInteger::fetchAndSubOrdered(T valueToSub)
원자 가져오기-내보내기.
QAtomicInteger 의 현재 값을 읽은 다음 valueToSub 을 현재 값에서 빼서 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
operator-=() 및 fetchAndAddOrdered()도 참조하세요 .
T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)
원자 가져오기-내보내기.
QAtomicInteger 의 현재 값을 읽은 다음 valueToSub 을 현재 값에서 빼서 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
operator-=() 및 fetchAndAddRelaxed()도 참조하세요 .
T QAtomicInteger::fetchAndSubRelease(T valueToSub)
원자 가져오기-내보내기.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToSub 을 현재 값에서 빼서 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
operator-=() 및 fetchAndAddRelease()도 참조하세요 .
T QAtomicInteger::fetchAndXorAcquire(T valueToXor)
원자 가져오기 및 XOR.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToXor 을 현재 값으로 비트 단위로 XOR하여 원래 값을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 이전에 다시 정렬되지 않도록 보장합니다.
operator^=()도 참조하세요 .
T QAtomicInteger::fetchAndXorOrdered(T valueToXor)
원자 가져오기 및 XOR.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToXor 을 현재 값으로 비트 단위로 XOR하여 원래 값을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서)가 다시 정렬되지 않을 수 있습니다.
operator^=()도 참조하세요 .
T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)
원자 가져오기 및 XOR.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToXor 을 현재 값으로 비트 단위로 XOR하여 원래 값을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
operator^=()도 참조하세요 .
T QAtomicInteger::fetchAndXorRelease(T valueToXor)
원자 가져오기 및 XOR.
이 QAtomicInteger 의 현재 값을 읽은 다음 valueToXor 을 현재 값으로 비트 단위로 XOR하여 원래 값을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
operator^=()도 참조하세요 .
[static constexpr]
bool QAtomicInteger::isFetchAndAddNative()
가져오기 및 추가가 원자 프로세서 명령어를 사용하여 구현되면 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
[static constexpr]
bool QAtomicInteger::isFetchAndAddWaitFree()
원자 가져오기 및 추가가 대기 시간이 없는 경우 true
을 반환하고, 그렇지 않으면 false 를 반환합니다.
[static constexpr]
bool QAtomicInteger::isFetchAndStoreNative()
가져오기 및 저장이 원자 프로세서 명령어를 사용하여 구현된 경우 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
[static constexpr]
bool QAtomicInteger::isFetchAndStoreWaitFree()
원자 가져오기 및 저장이 대기 시간이 없는 경우 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
[static constexpr]
bool QAtomicInteger::isReferenceCountingNative()
참조 카운팅이 원자 프로세서 명령어를 사용하여 구현된 경우 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
[static constexpr]
bool QAtomicInteger::isReferenceCountingWaitFree()
원자 참조 카운팅이 대기 시간이 없는 경우 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
[static constexpr]
bool QAtomicInteger::isTestAndSetNative()
테스트 및 설정이 원자 프로세서 명령어를 사용하여 구현된 경우 true
을 반환하고, 그렇지 않으면 false를 반환합니다.
[static constexpr]
bool QAtomicInteger::isTestAndSetWaitFree()
원자 테스트 및 설정이 대기 시간이 없는 경우 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
T QAtomicInteger::loadAcquire() const
'획득' 메모리 순서를 사용하여 이 QAtomicInteger 값을 원자적으로 로드합니다. 이 값은 어떤 방식으로도 수정되지 않지만 그대로 유지된다는 보장은 없습니다.
storeRelaxed() 및 loadRelaxed()도 참조하세요 .
T QAtomicInteger::loadRelaxed() const
완화된 메모리 순서를 사용하여 이 QAtomicInteger 값을 원자적으로 로드합니다. 이 값은 어떤 방식으로도 수정되지 않지만 그대로 유지된다는 보장은 없습니다.
storeRelaxed() 및 loadAcquire()도 참조하세요 .
bool QAtomicInteger::ref()
이 값을 원자 단위로 증가시킵니다 QAtomicInteger. 새 값이 0이 아닌 경우 true
을 반환하고, 그렇지 않으면 거짓을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서대로)가 다시 정렬되지 않을 수 있습니다.
deref() 및 operator++()도 참조하세요 .
void QAtomicInteger::storeRelaxed(T newValue)
완화된 메모리 순서를 사용하여 newValue 값을 이 원자 유형에 원자적으로 저장합니다.
storeRelease() 및 loadRelaxed()도 참조하세요 .
void QAtomicInteger::storeRelease(T newValue)
"릴리스" 메모리 순서를 사용하여 newValue 값을 이 원자 유형에 원자적으로 저장합니다.
storeRelaxed() 및 loadAcquire()도 참조하세요 .
bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue)
원자 테스트 및 설정.
참고: 이 함수를 루프에서 사용하는 경우, 대신 T ¤tValue
인수를 추가하여 오버로드를 사용하면 실패 시 추가 load() 호출을 피할 수 있습니다.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 참을 반환합니다. 값이 같지 않으면 이 함수는 아무 작업도 수행하지 않고 false
을 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 전에 다시 정렬되지 않도록 합니다.
bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue, T ¤tValue)
원자 테스트 및 설정.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 테스트 및 설정 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true
를 반환합니다. 값이 같지 않으면 이 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false
를 반환합니다.
이 함수는 획득 memory ordering 시맨틱을 사용하여 원자 연산 이후의 메모리 액세스(프로그램 순서대로)가 원자 연산 전에 다시 정렬되지 않도록 합니다.
bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue)
원자 테스트 및 설정.
참고: 이 함수를 루프에서 사용하는 경우, 대신 T ¤tValue
인수를 추가하여 오버로드를 사용하면 실패 시 추가 load() 호출을 피할 수 있습니다.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 참을 반환합니다. 값이 같지 않으면 이 함수는 아무 작업도 수행하지 않고 false
을 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서대로)가 순서가 바뀌지 않을 수 있습니다.
bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue, T ¤tValue)
원자 테스트 및 설정.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 테스트 및 설정 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true
를 반환합니다. 값이 같지 않으면 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false
를 반환합니다.
이 함수는 정렬된 memory ordering 시맨틱을 사용하므로 원자 연산 전후의 메모리 액세스(프로그램 순서대로)가 다시 정렬되지 않을 수 있습니다.
bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue)
원자 테스트 및 설정.
참고: 이 함수를 루프에서 사용하는 경우, 대신 T ¤tValue
인수를 추가하여 오버로드를 사용하면 실패 시 추가 load() 호출을 피할 수 있습니다.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 참을 반환합니다. 값이 같지 않으면 이 함수는 아무 작업도 수행하지 않고 false
을 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue, T ¤tValue)
원자 테스트 및 설정.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 테스트 및 설정 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true
를 반환합니다. 값이 같지 않으면 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false
를 반환합니다.
이 함수는 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재지정할 수 있도록 완화된 memory ordering 시맨틱을 사용합니다.
bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue)
원자 테스트 및 설정.
참고: 이 함수를 루프에서 사용하는 경우, 대신 T ¤tValue
인수를 추가하여 오버로드를 사용하면 실패 시 추가 load() 호출을 피할 수 있습니다.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 참을 반환합니다. 값이 같지 않으면 이 함수는 아무 작업도 수행하지 않고 false
을 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 후에 다시 정렬되지 않도록 합니다.
bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue, T ¤tValue)
원자 테스트 및 설정.
이 QAtomicInteger 의 현재 값이 expectedValue 인 경우 테스트 및 설정 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true
를 반환합니다. 값이 같지 않으면 이 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false
를 반환합니다.
이 함수는 릴리스 memory ordering 시맨틱을 사용하여 원자 연산 이전의 메모리 액세스(프로그램 순서대로)가 원자 연산 이후에 다시 정렬되지 않도록 합니다.
T QAtomicInteger::operator T() const
가능하면 순차적으로 일관된 메모리 순서를 사용하여 QAtomicInteger 값을 원자적으로 로드하고, 그렇지 않은 경우 '획득' 순서를 사용합니다. 이 값은 어떤 식으로든 수정되지 않지만 그대로 유지된다는 보장은 없습니다.
loadRelaxed() 및 loadAcquire()도 참조하세요 .
T QAtomicInteger::operator&=(T value)
원자 더하기 및 가져오기.
QAtomicInteger 의 현재 값을 읽은 다음 value 을 현재 값에 비트 단위로 AND하여 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
fetchAndAndOrdered()도 참조하세요 .
T QAtomicInteger::operator++()
이 값을 원자적으로 미리 증가시킵니다 QAtomicInteger. 이 원자의 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하고, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
ref(), operator++(int) 및 operator--()도 참조하세요 .
T QAtomicInteger::operator++(int)
이 값을 원자적으로 사후 증가시킵니다 QAtomicInteger. 이 아토믹의 이전 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하고, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
ref(), operator++() 및 operator--(int)도 참조하세요 .
T QAtomicInteger::operator+=(T value)
원자 추가 및 가져오기.
QAtomicInteger 의 현재 값을 읽은 다음 value 을 현재 값에 더하여 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하고, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
fetchAndAddOrdered() 및 operator-=()도 참조하세요 .
T QAtomicInteger::operator--()
이 값을 원자적으로 미리 감소시킵니다 QAtomicInteger. 이 원자의 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하고, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
deref(), operator--(int) 및 operator++()도 참조하세요 .
T QAtomicInteger::operator--(int)
이 값을 원자적으로 사후 감소시킵니다 QAtomicInteger. 이 아토믹의 이전 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하고, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
deref(), operator--() 및 operator++(int)도 참조하세요 .
T QAtomicInteger::operator-=(T value)
원자 하위 및 가져오기.
QAtomicInteger 의 현재 값을 읽은 다음 value 을 현재 값에서 빼서 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
fetchAndSubOrdered() 및 operator+=()도 참조하세요 .
QAtomicInteger<T> &QAtomicInteger::operator=(T)
가능하면 순차적으로 일관된 메모리 순서를 사용하여 다른 값을 이 원자 유형에 원자적으로 저장하고, 그렇지 않은 경우 "해제" 순서를 사용하여 저장합니다. 이 함수는 이 객체에 대한 참조를 반환합니다.
storeRelaxed() 및 storeRelease()도 참조하세요 .
[noexcept]
QAtomicInteger<T> &QAtomicInteger::operator=(const QAtomicInteger<T> &other)
other 을 이 QAtomicInteger 에 할당하고 이 QAtomicInteger 에 대한 참조를 반환합니다.
T QAtomicInteger::operator^=(T value)
원자 XOR 및 가져오기.
이 QAtomicInteger 의 현재 값을 읽은 다음 value 을 현재 값에 비트 단위로 XOR하여 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
fetchAndXorOrdered()도 참조하세요 .
T QAtomicInteger::operator|=(T value)
원자 또는-and-fetch.
이 QAtomicInteger 의 현재 값을 읽은 다음 value 을 현재 값에 비트 단위로 연산하여 새 값을 반환합니다.
이 함수는 가능하면 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "정렬된" 순서를 사용합니다.
fetchAndOrOrdered()도 참조하세요 .
관련 비회원
[noexcept, since 6.7]
void qYieldCpu()
이 스레드의 스케줄을 해제하지 않고 하드웨어 명령어를 사용하여 현재 스레드의 실행을 지정되지 않은 시간 동안 일시 중지합니다. 이 함수는 코드에서 다른 스레드가 원자 변수를 수정할 것으로 예상하는 고처리량 루프에서 사용하기 위한 것입니다. 이는 전체 스레드를 CPU에서 제거하고 다른 스레드(다른 프로세스에 속할 수 있음)를 실행할 수 있는 OS 수준 작업인 QThread::yieldCurrentThread()와는 완전히 다릅니다.
따라서
while (!condition) ;
대신
while (!condition) qYieldCpu();
이는 동일한 코어에서 하드웨어 멀티스레딩을 사용하거나 사용하지 않을 때 모두 유용합니다. 하드웨어 스레드의 경우, 형제 스레드의 리소스를 고갈시킬 수 있는 추가 투기적 실행이 파이프라인을 가득 채우는 것을 방지하는 역할을 합니다. 코어와 더 높은 수준의 분리를 통해 캐시 일관성 프로토콜은 수정 및 검사 중인 캐시 라인을 이 코드가 예상하는 결과를 가진 논리적 프로세서에 할당할 수 있습니다.
또한 메모리 위치를 독점적으로 확보하기 위한 경합을 피하기 위해 전역 변수를 수정하지 않는 코드를 반복하는 것이 좋습니다. 따라서 스핀록 획득과 같은 원자적 수정 루프가 있어야 합니다:
while (true) { while (!readOnlyCondition(atomic)) qYieldCpu(); if (modify(atomic)) break; }
x86 프로세서와 Zihintpause
확장자를 가진 RISC-V 프로세서에서는 PAUSE
명령어를 내보내고, 이를 지원하지 않는 프로세서에서는 무시되며, ARMv7 이상 ARM 프로세서에서는 YIELD
명령어를 내보냅니다.
이 함수는 Qt 6.7에 도입되었습니다.
매크로 문서
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE
이 매크로는 프로세서가 정수에 대한 원자 가져오기 및 추가를 지원하는 경우에만 정의됩니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE
이 매크로는 하드웨어가 정수에 대한 원자 가져오기 및 추가를 지원하지 않을 때 정의됩니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
이 매크로는 특정 세대의 프로세서만 정수에 대한 원자 가져오기 및 추가를 지원할 때 정의됩니다. QAtomicInteger <T>::isFetchAndAddNative() 함수를 사용하여 프로세서가 지원하는 기능을 확인하세요.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_WAIT_FREE
이 매크로는 Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE 와 함께 정의되어 정수에 대한 원자 가져오기 및 추가가 대기 없이 이루어짐을 나타냅니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE
이 매크로는 프로세서가 정수에 대한 원자 가져오기 및 저장을 지원하는 경우에만 정의됩니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE
이 매크로는 하드웨어가 정수에 대한 원자 가져오기 및 저장을 지원하지 않을 때 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)로 정수의 크기입니다.
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
이 매크로는 특정 세대의 프로세서만 정수에 대한 원자 가져오기 및 저장을 지원할 때 정의됩니다. QAtomicInteger <T>::isFetchAndStoreNative() 함수를 사용하여 프로세서가 무엇을 지원하는지 확인하세요.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_WAIT_FREE
이 매크로는 Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE 와 함께 정의되어 정수에 대한 원자 가져오기 및 저장이 대기 없이 이루어짐을 나타냅니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
Q_ATOMIC_INTnn_IS_SUPPORTED
이 매크로는 이 컴파일러/아키텍처 조합에서 nn 크기(비트 단위)의 원자 정수가 지원되는 경우 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
다음 매크로는 항상 정의됩니다:
- Q_ATOMIC_INT8_IS_SUPPORTED
- Q_ATOMIC_INT16_IS_SUPPORTED
- Q_ATOMIC_INT32_IS_SUPPORTED
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
이 매크로는 모든 세대의 프로세서가 원자 참조 계수를 지원하는 경우에만 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE
이 매크로는 하드웨어가 원자 참조 카운트를 지원하지 않을 때 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE
이 매크로는 특정 세대의 프로세서만 원자 참조 카운팅을 지원할 때 정의됩니다. QAtomicInteger <T>::isReferenceCountingNative() 함수를 사용하여 사용 중인 프로세서가 지원하는 기능을 확인하세요.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE
이 매크로는 참조 카운팅에 대기 시간이 없음을 나타내기 위해 Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE 와 함께 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE
이 매크로는 프로세서가 정수에 대한 원자 테스트 및 설정을 지원하는 경우에만 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)로 정수의 크기입니다.
Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE
이 매크로는 하드웨어가 정수에 대한 원자 테스트 및 설정을 지원하지 않을 때 정의됩니다.
nn은 비트 단위(8, 16, 32 또는 64)로 정수의 크기입니다.
Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE
이 매크로는 특정 세대의 프로세서만 정수에 대한 원자 테스트 및 설정을 지원할 때 정의됩니다. QAtomicInteger <T>::isTestAndSetNative() 함수를 사용하여 프로세서가 무엇을 지원하는지 확인하세요.
nn은 비트 단위(8, 16, 32 또는 64)의 정수 크기입니다.
Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE
이 매크로는 Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE 와 함께 정의되어 정수에 대한 원자 테스트 및 설정이 대기 시간이 없음을 나타냅니다.
nn은 정수의 크기(8, 16, 32 또는 64비트)입니다.
© 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.