이 페이지에서

QAtomicPointer Class

template <typename T> class QAtomicPointer

QAtomicPointer 클래스는 포인터에 대해 플랫폼에 구애받지 않는 원자적 연산을 제공하는 템플릿 클래스입니다. 더 보기...

헤더: #include <QAtomicPointer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

공개 함수

QAtomicPointer(T *value = nullptr)
QAtomicPointer(const QAtomicPointer<T> &other)
T *fetchAndAddAcquire(qptrdiff valueToAdd)
T *fetchAndAddOrdered(qptrdiff valueToAdd)
T *fetchAndAddRelaxed(qptrdiff valueToAdd)
T *fetchAndAddRelease(qptrdiff valueToAdd)
T *fetchAndStoreAcquire(T *newValue)
T *fetchAndStoreOrdered(T *newValue)
T *fetchAndStoreRelaxed(T *newValue)
T *fetchAndStoreRelease(T *newValue)
T *loadAcquire() const
T *loadRelaxed() const
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)
QAtomicPointer<T> &operator=(const QAtomicPointer<T> &other)

정적 공용 멤버

매크로

상세 설명

정수에 대한 원자적 연산에 대해서는 QAtomicInteger 클래스를 참조하십시오.

원자 연산은 중단 없이 완료되는 복합 연산입니다. QAtomicPointer 클래스는 포인터에 대한 원자적 테스트-앤-셋(test-and-set), 페치-앤-스토어(fetch-and-store) 및 페치-앤-애드(fetch-and-add) 기능을 제공합니다. 템플릿 매개변수 T 는 포인터가 가리키는 유형을 지정합니다.

Atomic API

메모리 순서

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

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

테스트-앤-셋

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

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

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

페치-앤-스토어

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

T *originalValue = currentValue;
currentValue = newValue;
return originalValue;

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

페치-앤-애드

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

T *originalValue = currentValue;
currentValue += valueToAdd;
return originalValue;

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

Atomic API에 대한 기능 테스트

모든 프로세서에서 작동하는 플랫폼 독립적인 원자성 API를 제공하는 것은 어려운 과제입니다. QAtomicPointer가 제공하는 API는 모든 프로세서에서 원자적으로 작동함이 보장됩니다. 그러나 모든 프로세서가 QAtomicPointer가 제공하는 모든 연산에 대한 지원을 구현하는 것은 아니므로, 프로세서에 대한 정보를 노출할 필요가 있습니다.

다양한 매크로를 사용하여 컴파일 시점에 하드웨어에서 어떤 기능이 지원되는지 확인할 수 있습니다. 이를 통해 하드웨어가 특정 연산을 항상, 때때로, 또는 전혀 지원하지 않는지 알 수 있습니다. 매크로의 형식은Q_ATOMIC_POINTER_OPERATION_IS_HOW_NATIVE입니다. OPERATION은 ` TEST_AND_SET`, ` FETCH_AND_STORE`, ` FETCH_AND_ADD` 중 하나이며, HOW는 `ALWAYS`, `SOMETIMES`, `NOT` 중 하나입니다. 각 연산마다 정확히 하나의 매크로만 정의됩니다. 예를 들어, ` Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE `가 정의되어 있다면 ` Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE `이나 ` Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE `은 정의되지 않습니다.

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

원자적 연산이 최신 세대의 프로세서에서만 지원되는 경우, QAtomicPointer는 isTestAndSetNative(), isFetchAndStoreNative() 및 isFetchAndAddNative() 함수를 통해 런타임에 하드웨어가 무엇을 지원하는지 확인할 수 있는 방법도 제공합니다. 대기 없는(wait-free) 구현은 isTestAndSetWaitFree(), isFetchAndStoreWaitFree() 및 isFetchAndAddWaitFree() 함수를 사용하여 감지할 수 있습니다.

다음은 QAtomicPointer의 모든 기능 매크로 목록입니다:

QAtomicInteger 와 qYieldCpu()도 참조하십시오 .

멤버 함수 설명서

[constexpr noexcept] QAtomicPointer::QAtomicPointer(T *value = nullptr)

주어진 ` value`을 사용하여 `QAtomicPointer`를 생성합니다.

[noexcept] QAtomicPointer::QAtomicPointer(const QAtomicPointer<T> &other)

other 의 복사본을 생성합니다.

T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd)

원자적 읽기-더하기 연산.

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

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

T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd)

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

이 QAtomicPointer 의 현재 값을 읽은 다음, 현재 값에 valueToAdd 를 더한 후 원래 값을 반환합니다.

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

T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd)

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

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

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

T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd)

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

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

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

T *QAtomicPointer::fetchAndStoreAcquire(T *newValue)

원자적 읽기-쓰기.

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

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

T *QAtomicPointer::fetchAndStoreOrdered(T *newValue)

원자적 읽기-쓰기.

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

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

T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue)

원자적 읽기-쓰기.

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

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

T *QAtomicPointer::fetchAndStoreRelease(T *newValue)

원자적 읽기-쓰기.

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

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

[static constexpr] bool QAtomicPointer::isFetchAndAddNative()

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

[static constexpr] bool QAtomicPointer::isFetchAndAddWaitFree()

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

[static constexpr] bool QAtomicPointer::isFetchAndStoreNative()

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

[static constexpr] bool QAtomicPointer::isFetchAndStoreWaitFree()

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

[static constexpr] bool QAtomicPointer::isTestAndSetNative()

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

[static constexpr] bool QAtomicPointer::isTestAndSetWaitFree()

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

T *QAtomicPointer::loadAcquire() const

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

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

T *QAtomicPointer::loadRelaxed() const

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

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

void QAtomicPointer::storeRelaxed(T *newValue)

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

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

void QAtomicPointer::storeRelease(T *newValue)

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

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

bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue)

Atomic test-and-set.

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

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

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

bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue, T *&currentValue)

Atomic test-and-set.

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

이 함수는 acquire memory ordering 세미언틱을 사용하며, 이는 (프로그램 순서상) 원자 연산 뒤에 오는 메모리 액세스가 원자 연산 이전에 재순서화되지 않도록 보장합니다. test-and-set이 실패하면, currentValue 는 acquire memory ordering 세미언틱을 사용하여 로드됩니다.

bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue)

Atomic test-and-set.

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

이 ` QAtomicPointer `의 현재 값이 ` expectedValue`인 경우, 테스트-앤-셋 함수는 ` newValue `를 이 ` QAtomicPointer `에 할당하고 `true`를 반환합니다. 값이 같지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 ` false`를 반환합니다.

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

bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue, T *&currentValue)

Atomic test-and-set.

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

이 함수는 순서 지정된 memory ordering 세미언틱을 사용하며, 이는 (프로그램 순서상) 원자 연산 전후의 메모리 액세스가 재순서화될 수 없음을 보장합니다. 테스트-앤-셋이 실패할 경우, currentValue 에는 acquire memory ordering 세미언틱에 따라 값이 로드됩니다.

bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue)

Atomic test-and-set.

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

이 ` QAtomicPointer `의 현재 값이 ` expectedValue`인 경우, 테스트-앤-셋 함수는 ` newValue `을 이 ` QAtomicPointer `에 할당하고 `true`를 반환합니다. 값이 같지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 ` false`를 반환합니다.

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

bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue, T *&currentValue)

Atomic test-and-set.

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

이 함수는 완화된 memory ordering 의미론을 사용하므로, 컴파일러와 프로세서가 메모리 액세스 순서를 자유롭게 재배열할 수 있습니다. test-and-set이 실패하면, currentValue 는 완화된 memory ordering 의미론에 따라 로드됩니다.

bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue)

Atomic test-and-set.

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

이 ` QAtomicPointer `의 현재 값이 ` expectedValue`인 경우, 테스트-앤-셋 함수는 ` newValue `를 이 ` QAtomicPointer `에 할당하고 `true`를 반환합니다. 값이 동일하지 않은 경우, 이 함수는 아무 작업도 수행하지 않고 ` false`를 반환합니다.

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

bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue, T *&currentValue)

Atomic test-and-set.

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

이 함수는 memory ordering 세미언틱스를 사용하며, 이는 (프로그램 순서상) 원자적 연산 이전의 메모리 접근이 원자적 연산 이후에 재정렬될 수 없음을 보장합니다. test-and-set이 실패할 경우, currentValue 에는 memory ordering 세미언틱스에 따라 값이 로드됩니다.

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

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

매크로 설명서

Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE

이 매크로는 사용자의 프로세서가 포인터에 대한 원자적 Fetch-and-Add를 지원하는 경우에만 정의됩니다.

Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE

이 매크로는 하드웨어가 포인터에 대한 원자적 가져오기-추가(atomic fetch-and-add)를 지원하지 않을 때 정의됩니다.

Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE

이 매크로는 프로세서의 특정 세대에서만 포인터에 대한 원자적 Fetch-and-Add를 지원하는 경우 정의됩니다. 프로세서가 어떤 기능을 지원하는지 확인하려면 ` QAtomicPointer::isFetchAndAddNative()` 함수를 사용하십시오.

Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE

이 매크로는 ` Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE `와 함께 정의되어, 포인터에 대한 원자적 읽기-추가 연산이 대기 시간이 없음을 나타냅니다.

Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE

이 매크로는 프로세서가 포인터에 대한 원자적 페치-앤-스토어를 지원하는 경우에만 정의됩니다.

Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE

이 매크로는 하드웨어가 포인터에 대한 원자적 가져오기-저장(atomic fetch-and-store)을 지원하지 않을 때 정의됩니다.

Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE

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

Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE

이 매크로는 ` Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE `와 함께 정의되어, 포인터에 대한 원자적 읽기-저장 작업이 대기 시간이 없음을 나타냅니다.

Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE

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

Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE

이 매크로는 하드웨어가 포인터에 대한 원자적 테스트-앤-셋(atomic test-and-set)을 지원하지 않을 때 정의됩니다.

Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE

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

Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE

이 매크로는 ` Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE `와 함께 정의되어, 포인터에 대한 원자적 테스트-앤-셋 연산이 대기 시간이 없음을 나타냅니다.

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