이 페이지에서

QAtomicInteger Class

template <typename T> class QAtomicInteger

QAtomicInteger 클래스는 정수에 대한 플랫폼 독립적인 원자적 연산을 제공합니다. 더 보기...

헤더: #include <QAtomicInteger>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속된 항목:

QAtomicInt

공개 함수

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 &currentValue)
bool testAndSetOrdered(T expectedValue, T newValue)
bool testAndSetOrdered(T expectedValue, T newValue, T &currentValue)
bool testAndSetRelaxed(T expectedValue, T newValue)
bool testAndSetRelaxed(T expectedValue, T newValue, T &currentValue)
bool testAndSetRelease(T expectedValue, T newValue)
bool testAndSetRelease(T expectedValue, T newValue, T &currentValue)
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)

정적 공용 멤버

(since 6.7) void qYieldCpu()

매크로

상세 설명

포인터에 대한 원자적 연산에 대해서는 ` QAtomicPointer ` 클래스를 참조하십시오.

원자 연산은 중단 없이 완료되는 복잡한 연산입니다. QAtomicInteger 클래스는 정수에 대한 원자 참조 카운팅, 테스트-앤-셋(test-and-set), 페치-앤-스토어(fetch-and-store), 페치-앤-애드(fetch-and-add) 기능을 제공합니다. 템플릿 매개변수 T 는 원자 연산이 적용될 정수형을 지정합니다.

템플릿 매개변수 T 는 반드시 C++ 정수형이어야 합니다:

  • 8비트: bool, char, signed char, unsigned char, qint8, quint8, char8_t (C++20)
  • 16비트: short, unsigned short, qint16, quint16, char16_t
  • 32비트: int, unsigned int, qint32, quint32, char32_t
  • 64비트: long long, unsigned long long, qint64, quint64
  • 플랫폼별 크기: long, unsigned long
  • 포인터 크기: qintptr, quintptr, qptrdiff

위의 목록 중에서 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는 원자적 테스트-앤-셋(test-and-set), 페치-앤-스토어(fetch-and-store), 페치-앤-애드(fetch-and-add) 함수에 대한 여러 구현을 제공합니다. 각 구현체는 원자적 명령어 주변의 메모리 액세스 작업이 프로세서에 의해 어떻게 실행되는지를 설명하는 메모리 순서 의미론을 정의합니다. 많은 최신 아키텍처에서 비순차적 실행과 메모리 순서 변경을 허용하므로, 애플리케이션이 모든 프로세서에서 올바르게 작동하도록 하려면 올바른 의미론을 사용해야 합니다.

  • Relaxed - 메모리 순서는 명시되지 않으며, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재조정할 수 있습니다.
  • Acquire - (프로그램 순서상) 원자 연산 뒤에 오는 메모리 액세스는 원자 연산 앞쪽으로 재순서화될 수 없습니다.
  • Release - (프로그램 순서상) 원자 연산 이전의 메모리 액세스는 원자 연산 이후로 재배열될 수 없습니다.
  • Ordered - Acquire와 Release 시맨틱이 결합된 형태입니다.

테스트 앤 세트

QAtomicInteger의 현재 값이 예상된 값과 일치하면, 테스트-앤-셋 함수는 QAtomicInteger에 새로운 값을 할당하고 true를 반환합니다. 값이 일치하지 않으면, 이 함수들은 아무 작업도 수행하지 않고 false를 반환합니다. 이 연산은 다음 코드와 동일합니다:

if (currentValue == expectedValue) {
    currentValue = newValue;
    return true;
}
return false;

테스트-앤-셋 함수는 총 4가지가 있습니다: ` testAndSetRelaxed()`, ` testAndSetAcquire()`, ` testAndSetRelease()`, ` testAndSetOrdered()`. 서로 다른 메모리 순서 세미언틱에 대한 설명은 위 내용을 참조하십시오.

페치-앤-스토어

원자적 페치-앤-스토어 함수는 QAtomicInteger의 현재 값을 읽은 다음 새 값을 할당하고, 원래 값을 반환합니다. 이 연산은 다음 코드와 동일합니다:

int originalValue = currentValue;
currentValue = newValue;
return originalValue;

페치-앤-스토어 함수는 4가지가 있습니다: fetchAndStoreRelaxed(), fetchAndStoreAcquire(), fetchAndStoreRelease(), fetchAndStoreOrdered(). 서로 다른 메모리 순서 의미론에 대한 설명은 위를 참조하십시오.

페치-앤-애드

원자적 Fetch-and-Add 함수는 QAtomicInteger의 현재 값을 읽은 다음, 주어진 값을 현재 값에 더하여 원래 값을 반환합니다. 이 연산은 다음 코드와 동일합니다:

int originalValue = currentValue;
currentValue += valueToAdd;
return originalValue;

fetch-and-add 함수는 4가지가 있습니다: fetchAndAddRelaxed(), fetchAndAddAcquire(), fetchAndAddRelease(), fetchAndAddOrdered(). 서로 다른 메모리 순서 의미론에 대한 설명은 위를 참조하십시오.

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는 정의되지 않습니다.

상수 시간 내에 완료되는 연산을 ‘대기 없는(wait-free)’ 연산이라고 합니다. 이러한 연산은 어떠한 종류의 잠금(lock)이나 루프도 사용하지 않고 구현됩니다. 항상 지원되며 웨이트 프리인 원자적 연산의 경우, Qt는Q_ATOMIC_INTnn_OPERATION_IS_ALWAYS_NATIVE 외에도Q_ATOMIC_INTnn_OPERATION_IS_WAIT_FREE를 정의합니다.

원자적 연산이 최신 세대의 프로세서에서만 지원되는 경우, QAtomicInteger는 isReferenceCountingNative(), isTestAndSetNative(), isFetchAndStoreNative() 및 isFetchAndAddNative() 함수를 통해 런타임에 하드웨어가 무엇을 지원하는지 확인할 수 있는 방법도 제공합니다. 대기 없는(wait-free) 구현은 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_테스트_앤_셋_은_때때로_네이티브_함
  • Q_ATOMIC_INTnn_테스트_및_설정이_네이티브가_아님
  • Q_ATOMIC_INTnn_테스트_및_설정이_대기_없음
  • 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 를 반환하고, 그렇지 않으면 false를 반환합니다.

이 함수는 순서 지정된 memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 전후의 메모리 액세스 순서가 재조정되지 않도록 보장합니다.

ref() 및 operator--()도 참조하십시오 .

T QAtomicInteger::fetchAndAddAcquire(T valueToAdd)

원자적 가져오기 및 더하기.

이 QAtomicInteger 의 현재 값을 읽은 다음, 현재 값에 valueToAdd 를 더하여 원래 값을 반환합니다.

이 함수는 acquire 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 연산.

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToAnd 를 현재 값과 비트별 AND 연산을 수행하여 원래 값을 반환합니다.

이 함수는 acquire memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 뒤에 오는 메모리 접근이 원자적 연산 이전에 재순서화되지 않도록 보장합니다.

operator&=()도 참조하십시오 .

T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)

원자적 페치-앤드-앤드.

이 ` QAtomicInteger `의 현재 값을 읽은 다음, ` valueToAnd `를 현재 값과 비트별 AND 연산을 수행하여 원래 값을 반환합니다.

이 함수는 순서 지정된 memory ordering 의미 체계를 사용하며, 이는 (프로그램 순서상) 원자적 연산 전후의 메모리 액세스가 재순서화되지 않도록 보장합니다.

operator&=()도 참조하십시오 .

T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)

원자적 가져오기-AND 연산.

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToAnd 를 현재 값과 비트별 AND 연산을 수행하여 원래 값을 반환합니다.

이 함수는 완화된 memory ordering 의미론을 사용하므로, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재조정할 수 있습니다.

operator&=()도 참조하십시오 .

T QAtomicInteger::fetchAndAndRelease(T valueToAnd)

원자적 페치-앤드-앤드.

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToAnd 를 현재 값과 비트별 AND 연산을 수행하여 원래 값을 반환합니다.

이 함수는 릴리스 ( release ) memory ordering 세미언틱을 사용하며, 이는 (프로그램 순서상) 원자 연산 이전에 이루어진 메모리 액세스가 원자 연산 이후에 재순서화되지 않도록 보장합니다.

operator&=()도 참조하십시오 .

T QAtomicInteger::fetchAndOrAcquire(T valueToOr)

원자적 fetch-and-or.

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToOr 를 현재 값과 비트별 OR 연산을 수행하여 원래 값을 반환합니다.

이 함수는 acquire- memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자 연산 이후에 이루어지는 메모리 접근이 원자 연산 이전에 재순서화되지 않도록 보장합니다.

operator|=()도 참조하십시오 .

T QAtomicInteger::fetchAndOrOrdered(T valueToOr)

원자적 페치-앤-오르(Fetch-and-OR).

이 ` QAtomicInteger `의 현재 값을 읽은 다음, ` valueToOr `를 현재 값과 비트별 OR 연산을 수행하여 원래 값을 반환합니다.

이 함수는 순서 지정된 memory ordering 시맨틱을 사용하며, 이는 (프로그램 순서상) 원자적 연산 전후의 메모리 액세스가 재순서화되지 않도록 보장합니다.

operator|=()도 참조하십시오 .

T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)

원자적 페치-앤-오르(Atomic fetch-and-or).

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToOr 를 현재 값과 비트별 OR 연산을 수행하여 원래 값을 반환합니다.

이 함수는 완화된 memory ordering 의미론을 사용하므로, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재조정할 수 있습니다.

operator|=()도 참조하십시오 .

T QAtomicInteger::fetchAndOrRelease(T valueToOr)

원자적 페치-앤-오르(Atomic fetch-and-or).

이 QAtomicInteger 의 현재 값을 읽은 다음, valueToOr 를 현재 값과 비트별 OR 연산을 수행하여 원래 값을 반환합니다.

이 함수는 릴리즈 memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 이전에 발생한 메모리 액세스 순서가 원자적 연산 이후에 재순서화되지 않도록 보장합니다.

operator|=()도 참조하십시오 .

T QAtomicInteger::fetchAndStoreAcquire(T newValue)

원자적 읽기-쓰기.

이 QAtomicInteger 의 현재 값을 읽은 다음, newValue 을 할당하고 원래 값을 반환합니다.

이 함수는 acquire- 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 을 빼서 원래 값을 반환합니다.

이 함수는 acquire 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 연산을 수행하여 원래 값을 반환합니다.

이 함수는 acquire 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 연산을 수행하여 원래 값을 반환합니다.

이 함수는 릴리스 ( release ) memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 이전의 메모리 액세스가 원자적 연산 이후에 재순서화되지 않도록 보장합니다.

operator^=()도 참조하십시오 .

[static constexpr] bool QAtomicInteger::isFetchAndAddNative()

fetch-and-add가 원자적 프로세서 명령어를 사용하여 구현된 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

[static constexpr] bool QAtomicInteger::isFetchAndAddWaitFree()

원자적 fetch-and-add가 대기 시간이 없는 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

[static constexpr] bool QAtomicInteger::isFetchAndStoreNative()

fetch-and-store가 원자적 프로세서 명령어를 사용하여 구현된 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

[static constexpr] bool QAtomicInteger::isFetchAndStoreWaitFree()

원자적 가져오기-저장(fetch-and-store)이 대기 시간이 없는 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

[static constexpr] bool QAtomicInteger::isReferenceCountingNative()

참조 카운팅이 원자적 프로세서 명령어를 사용하여 구현된 경우 ` true `를 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

[static constexpr] bool QAtomicInteger::isReferenceCountingWaitFree()

원자적 참조 카운팅이 대기 없는(wait-free) 경우 ` true `를 반환하고, 그렇지 않은 경우 false를 반환합니다.

[static constexpr] bool QAtomicInteger::isTestAndSetNative()

test-and-set이 원자적 프로세서 명령어를 사용하여 구현된 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

[static constexpr] bool QAtomicInteger::isTestAndSetWaitFree()

원자적 test-and-set이 대기 시간이 없는 경우 ` true `을 반환하고, 그렇지 않은 경우 `false`를 반환합니다.

T QAtomicInteger::loadAcquire() const

"Acquire" 메모리 순서를 사용하여 이 QAtomicInteger 의 값을 원자적으로 읽어옵니다. 값은 어떠한 방식으로도 수정되지 않지만, 해당 값이 그대로 유지된다는 보장은 없음을 유의하십시오.

storeRelaxed() 및 loadRelaxed()도 참조하십시오 .

T QAtomicInteger::loadRelaxed() const

이 ` QAtomicInteger `의 값을 완화된 메모리 순서를 사용하여 원자적으로 읽어옵니다. 값은 어떠한 방식으로도 수정되지 않지만, 해당 값이 그대로 유지된다는 보장은 없음을 유의하십시오.

storeRelaxed() 및 loadAcquire()도 참조하십시오 .

bool QAtomicInteger::ref()

이 QAtomicInteger 의 값을 원자적으로 증가시킵니다. 새로운 값이 0이 아닐 경우 true 를 반환하고, 그렇지 않으면 false를 반환합니다.

이 함수는 순서 지정된 memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자 연산 전후의 메모리 액세스가 재정렬되지 않도록 보장합니다.

deref() 및 operator++()도 참조하십시오 .

void QAtomicInteger::storeRelaxed(T newValue)

이 원자형에 newValue 값을 이완된 메모리 순서를 사용하여 원자적으로 저장합니다.

storeRelease() 및 loadRelaxed()도 참조하십시오 .

void QAtomicInteger::storeRelease(T newValue)

“Release” 메모리 순서를 사용하여 newValue 값을 이 원자형에 원자적으로 저장합니다.

storeRelaxed() 및 loadAcquire()도 참조하십시오 .

bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue)

Atomic test-and-set.

참고: 이 함수를 루프 내에서 사용하는경우 , 실패 시 불필요한 loadAcquire() 호출을 피할 수 있도록 추가 인자 T &currentValue 를 갖는 오버로드를 대신 사용하는 것을 고려하십시오.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true를 반환합니다. 값이 같지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 false 를 반환합니다.

이 함수는 acquire memory ordering 세미언틱을 사용하며, 이는 (프로그램 순서상) 원자적 연산 이후에 발생하는 메모리 액세스가 원자적 연산 이전에 재순서화되지 않도록 보장합니다.

bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue, T &currentValue)

Atomic test-and-set.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 true 를 반환합니다. 값이 동일하지 않은 경우, 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false 를 반환합니다.

이 함수는 acquire memory ordering 세манти크를 사용하며, 이는 (프로그램 순서상) 원자적 연산 뒤에 오는 메모리 액세스가 원자적 연산보다 먼저 재순서화되지 않도록 보장합니다. test-and-set이 실패하면, currentValue 는 acquire memory ordering 세манти크로 로드됩니다.

bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue)

Atomic test-and-set.

참고: 이 함수를 루프 내에서 사용하는경우 , 실패 시 불필요한 loadAcquire() 호출을 피할 수 있는 추가 인자 T &currentValue 를 사용하는 오버로드를 대신 고려하십시오.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true를 반환합니다. 값이 같지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 false 를 반환합니다.

이 함수는 순서 보장 ( memory ordering ) 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자 연산 전후의 메모리 액세스가 재정렬될 수 없음을 보장합니다.

bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue, T &currentValue)

Atomic test-and-set.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, 테스트-앤-셋 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true 를 반환합니다. 값이 동일 하지 않은 경우, 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false 를 반환합니다.

이 함수는 순서 보장(ordered ) memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자 연산 전후의 메모리 액세스가 재순서화되지 않도록 보장합니다. 테스트-앤-셋(test-and-set)이 실패할 경우, currentValue 는 획득(acquire ) memory ordering 세미언틱스를 사용하여 로드됩니다.

bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue)

Atomic test-and-set.

참고: 이 함수를 루프 내에서 사용하는경우 , 실패 시 불필요한 loadRelaxed() 호출을 방지할 수 있는 추가 T &currentValue 인자를 사용하는 오버로드를 대신 고려하십시오.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 true를 반환합니다. 값이 동일하지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 false 를 반환합니다.

이 함수는 완화된 memory ordering 의 의미론을 사용하므로, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재조정할 수 있습니다.

bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue, T &currentValue)

Atomic test-and-set.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 를 이 QAtomicInteger 에 할당하고 true 를 반환합니다. 값이 동일하지 않은 경우, 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false 를 반환합니다.

이 함수는 완화된 memory ordering 의미 체계를 사용하며, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재조정할 수 있도록 합니다. test-and-set이 실패할 경우, currentValue 는 완화된 memory ordering 의미 체계에 따라 로드됩니다.

bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue)

Atomic test-and-set.

참고: 이 함수를 루프 내에서 사용하는경우 , 실패 시 불필요한 loadRelaxed() 호출을 피할 수 있도록 추가 인자 T &currentValue 를 사용하는 오버로드를 대신 고려하십시오.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 true를 반환합니다. 값이 같지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 false 를 반환합니다.

이 함수는 memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 이전의 메모리 액세스가 원자적 연산 이후에 재정렬되지 않도록 보장합니다.

bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue, T &currentValue)

Atomic test-and-set.

이 QAtomicInteger 의 현재 값이 expectedValue 인 경우, test-and-set 함수는 newValue 을 이 QAtomicInteger 에 할당하고 true 을 반환합니다. 값이 일치하지 않는 경우, 함수는 이 QAtomicInteger 의 현재 값을 currentValue 에 로드하고 false 을 반환합니다.

이 함수는 memory ordering 세마틱스를 사용하며, 이는 (프로그램 순서상) 원자 연산 이전의 메모리 액세스가 원자 연산 이후에 재정렬되지 않도록 보장합니다. test-and-set이 실패할 경우, currentValue 에는 memory ordering 세마틱스에 따라 값이 로드됩니다.

QAtomicInteger::operator T() const

가능한 경우 순차적 일관성 메모리 순서를 사용하여 이 ` QAtomicInteger `의 값을 원자적으로 읽어오고, 그렇지 않은 경우 “Acquire” 순서를 사용합니다. 값은 어떠한 방식으로도 수정되지 않지만, 해당 값이 그대로 유지된다는 보장은 없음을 유의하십시오.

loadRelaxed() 및 loadAcquire()도 참조하십시오 .

T QAtomicInteger::operator&=(T value)

원자적 추가 및 가져오기.

이 ` QAtomicInteger `의 현재 값을 읽은 다음, ` value `를 현재 값과 비트 단위 AND 연산을 수행하여 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 정렬을 사용하며, 그렇지 않은 경우 "Ordered" 정렬을 사용합니다.

fetchAndAndOrdered()도 참조하십시오 .

T QAtomicInteger::operator++()

이 원자형 변수 QAtomicInteger 의 값을 원자적으로 미리 증가시킵니다. 이 원자형 변수의 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "Ordered" 순서를 사용합니다.

ref(), operator++(int), operator--()도 참조하십시오 .

T QAtomicInteger::operator++(int)

이 원자 변수 QAtomicInteger 의 값을 원자적으로 후증가시킵니다. 이 원자 변수의 이전 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "순서 지정(Ordered)" 순서를 사용합니다.

ref(), operator++(), operator--(int)도 참조하십시오 .

T QAtomicInteger::operator+=(T value)

원자적 추가 및 읽기.

이 QAtomicInteger 의 현재 값을 읽은 후, 현재 값에 value 를 더하여 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 "Ordered" 순서를 사용합니다.

fetchAndAddOrdered() 및 operator-=()도 참조하십시오 .

T QAtomicInteger::operator--()

이 원자 변수 QAtomicInteger 의 값을 원자적으로 미리 감소시킵니다. 이 원자 변수의 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 정렬 순서를 사용하며, 그렇지 않은 경우 "Ordered" 정렬 순서를 사용합니다.

deref(), operator--(int), operator++()도 참조하십시오 .

T QAtomicInteger::operator--(int)

이 원자적 객체( QAtomicInteger)의 값을 원자적으로 후감산합니다. 이 원자적 객체의 이전 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 정렬 방식을 사용하며, 그렇지 않은 경우에는 "Ordered" 정렬 방식을 사용합니다.

deref(), operator--(), operator++(int)도 참조하십시오 .

T QAtomicInteger::operator-=(T value)

Atomic sub-and-fetch.

이 ` QAtomicInteger `의 현재 값을 읽은 다음, 현재 값에서 ` value `을 뺀 후 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 정렬을 사용하며, 그렇지 않은 경우에는 “순차적(Ordered)” 정렬을 사용합니다.

fetchAndSubOrdered() 및 operator+=()도 참조하십시오 .

QAtomicInteger<T> &QAtomicInteger::operator=(T)

가능한 경우 순차적 일관성 메모리 순서를 사용하여 다른 값을 이 원자형에 원자적으로 저장하며, 그렇지 않은 경우 “Release” 순서를 사용합니다. 이 함수는 이 객체에 대한 참조를 반환합니다.

storeRelaxed() 및 storeRelease()도 참조하십시오 .

[noexcept] QAtomicInteger<T> &QAtomicInteger::operator=(const QAtomicInteger<T> &other)

other 를 이 QAtomicInteger 에 할당하고, 이 QAtomicInteger 에 대한 참조를 반환합니다.

T QAtomicInteger::operator^=(T value)

원자적 XOR 및 가져오기.

이 ` QAtomicInteger `의 현재 값을 읽은 다음, ` value `를 현재 값과 비트별 XOR 연산을 수행하여 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차 일관성 메모리 정렬을 사용하며, 그렇지 않은 경우 "Ordered" 정렬을 사용합니다.

fetchAndXorOrdered()도 참조하십시오 .

T QAtomicInteger::operator|=(T value)

원자적 OR-AND-FETCH.

이 ` QAtomicInteger `의 현재 값을 읽은 다음, ` value `를 현재 값과 비트별 OR 연산을 수행하여 새로운 값을 반환합니다.

이 함수는 가능한 경우 순차적으로 일관된 메모리 순서를 사용하며, 그렇지 않은 경우 “순서 지정(Ordered)” 순서를 사용합니다.

fetchAndOrOrdered()도 참조하십시오 .

관련 비회원 함수

[noexcept, since 6.7] void qYieldCpu()

하드웨어 명령어를 사용하여 현재 스레드의 스케줄링을 해제하지 않은 채, 지정되지 않은 시간 동안 스레드 실행을 일시 중지합니다. 이 함수는 코드가 다른 스레드가 원자 변수를 수정할 것을 기대하는 고처리량 루프에서 사용하도록 설계되었습니다. 이는 QThread::yieldCurrentThread()과는 완전히 다른데, 후자는 OS 수준의 작업으로, 스레드 전체를 CPU에서 제거하고 다른 스레드(다른 프로세스에 속할 수도 있음)가 실행되도록 허용할 수 있습니다.

따라서,

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

이 매크로는 사용 중인 프로세서가 정수에 대한 원자적 페치-앤-애드(atomic fetch-and-add)를 지원하는 경우에만 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)입니다.

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE

이 매크로는 하드웨어가 정수에 대한 원자적 읽기-더하기(atomic fetch-and-add)를 지원하지 않을 때 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)를 나타냅니다.

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE

이 매크로는 프로세서의 특정 세대에서만 정수에 대한 원자적 페치-앤-애드(atomic fetch-and-add)를 지원하는 경우에 정의됩니다. 프로세서가 무엇을 지원하는지 확인하려면 ` QAtomicInteger::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

이 매크로는 하드웨어가 정수에 대한 원자적 페치-앤-스토어(atomic fetch-and-store)를 지원하지 않을 때 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)를 나타냅니다.

Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE

이 매크로는 특정 세대의 프로세서에서만 정수에 대한 원자적 페치-앤-스토어(atomic fetch-and-store)를 지원하는 경우에 정의됩니다. 프로세서가 무엇을 지원하는지 확인하려면 ` QAtomicInteger::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::isReferenceCountingNative()` 함수를 사용하십시오.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)입니다.

Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE

이 매크로는 참조 카운팅이 대기 시간이 없는(wait-free) 방식임을 나타내기 위해 ` Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE `와 함께 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)를 나타냅니다.

Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE

이 매크로는 사용 중인 프로세서가 정수에 대한 원자적 테스트-앤-셋(atomic test-and-set)을 지원하는 경우에만 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)입니다.

Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE

이 매크로는 하드웨어가 정수에 대한 원자적 test-and-set을 지원하지 않을 때 정의됩니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)를 나타냅니다.

Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE

이 매크로는 특정 세대의 프로세서에서만 정수에 대한 원자적 테스트-앤-셋(atomic test-and-set)을 지원하는 경우에 정의됩니다. 프로세서가 무엇을 지원하는지 확인하려면 ` QAtomicInteger::isTestAndSetNative()` 함수를 사용하십시오.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)입니다.

Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE

이 매크로는 ` Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE `와 함께 정의되어, 정수에 대한 원자적 테스트-앤-셋(test-and-set) 연산이 대기 시간이 없다는 것을 나타냅니다.

nn은 정수의 크기(비트 단위: 8, 16, 32 또는 64)입니다.

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