Spec-Zone.ru › Qt

Класс QAtomicInteger

template <typename T> class QAtomicInteger

Класс QAtomicInteger предоставляет платформенно-независимые атомарные операции над целыми числами. Подробнее...

Заголовок: #include <QAtomicInteger>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С момента: Qt 5.3
Наследуется от:

QAtomicInt

  • Список всех членов, включая унаследованные

Общедоступные функции

QAtomicInteger(const QAtomicInteger<T> &other)
QAtomicInteger(T value = 0)
QAtomicInteger<T> & operator=(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 testAndSetOrdered(T expectedValue, T newValue)
bool testAndSetRelaxed(T expectedValue, T newValue)
bool testAndSetRelease(T expectedValue, T newValue)
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)
T operator^=(T value)
T operator|=(T value)

Статические общедоступные члены

bool isFetchAndAddNative()
bool isFetchAndAddWaitFree()
bool isFetchAndStoreNative()
bool isFetchAndStoreWaitFree()
bool isReferenceCountingNative()
bool isReferenceCountingWaitFree()
bool isTestAndSetNative()
bool isTestAndSetWaitFree()

Макросы

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_WAIT_FREE
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_WAIT_FREE
Q_ATOMIC_INTnn_IS_SUPPORTED
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE
Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_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_NOT_NATIVE
Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE
Q_ATOMIC_INTnn_TEST_AND_SET_IS_WAIT_FREE

Подробное описание

Для атомных операций с указателями см. класс QAtomicPointer.

Атомная операция — это сложная операция, которая завершается без прерывания. Класс QAtomicInteger предоставляет атомное управление ссылками, операции «сравнение и обмен», «получение и сохранение» и «получение и сложение» для целых чисел.

Шаблонный параметр T должен быть типом C++ целого числа:

  • 8 бит: char, signed char, unsigned char, qint8, quint8
  • 16 бит: short, unsigned short, qint16, quint16, char16_t (C++11)
  • 32 бит: int, unsigned int, qint32, quint32, char32_t (C++11)
  • 64 бит: long long, unsigned long long, qint64, quint64
  • размер, зависящий от платформы: long, unsigned long
  • размер указателя: qintptr, quintptr, qptrdiff

Из вышеперечисленных типов гарантируется работа только для 32-битных и указательных типов на всех платформах. Поддержка других размеров зависит от компилятора и архитектуры процессора, для которого компилируется код. Для проверки поддержки других типов проверьте макрос Q_ATOMIC_INT\e{nn}_IS_SUPPORTED, где \e{nn} — желаемое количество бит.

Атомный 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 — порядок памяти не определён, компилятор и процессор могут свободно переупорядочивать обращения к памяти.
  • 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(). См. выше объяснение различных семантик порядка памяти.

Получение и сложение

Атомные функции «получение и сложение» считывают текущее значение QAtomicInteger, а затем добавляют заданное значение к текущему значению, возвращая исходное значение. Эта операция эквивалентна следующему коду:

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

Существует 4 функции «получение и сложение»: fetchAndAddRelaxed(), fetchAndAddAcquire(), fetchAndAddRelease() и fetchAndAddOrdered(). См. выше объяснение различных семантик порядка памяти.

Тестирование функций атомного API

Предоставление независимого от платформы атомного API, работающего на всех процессорах, является сложной задачей. API, предоставляемый QAtomicInteger, гарантированно работает атомарно на всех процессорах. Однако, поскольку не все процессоры поддерживают все операции, предоставляемые 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.

Документация по функциям-членам

QAtomicInteger::QAtomicInteger(const QAtomicInteger<T> &other)

Создаёт копию other.

QAtomicInteger::QAtomicInteger(T value = 0)

Создаёт QAtomicInteger со значением value.

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

Присваивает other данному QAtomicInteger и возвращает ссылку на этот QAtomicInteger.

bool QAtomicInteger::deref()

Атомарно уменьшает значение этого QAtomicInteger. Возвращает true если новое значение не равно нулю, в противном случае — false.

Эта функция использует семантику упорядоченного упорядочения памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

См. также ref() и operator--().

T QAtomicInteger::fetchAndAddAcquire(T valueToAdd)

Атомарное fetch-and-add.

Считывает текущее значение этого QAtomicInteger и затем добавляет valueToAdd к текущему значению, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти, следующей за атомарной операцией (в порядке программы), не может быть переупорядочен перед атомарной операцией.

См. также operator+=() и fetchAndSubAcquire().

T QAtomicInteger::fetchAndAddOrdered(T valueToAdd)

Атомарное fetch-and-add.

Считывает текущее значение этого QAtomicInteger и затем добавляет valueToAdd к текущему значению, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

См. также operator+=() и fetchAndSubOrdered().

T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd)

Атомарное fetch-and-add.

Считывает текущее значение этого QAtomicInteger и затем добавляет valueToAdd к текущему значению, возвращая исходное значение.

Эта функция использует семантику слабого упорядочения доступа к памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

См. также operator+=() и fetchAndSubRelaxed().

T QAtomicInteger::fetchAndAddRelease(T valueToAdd)

Атомарное fetch-and-add.

Считывает текущее значение этого QAtomicInteger и затем добавляет valueToAdd к текущему значению, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, гарантирующую, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

См. также operator+=() и fetchAndSubRelease().

T QAtomicInteger::fetchAndAndAcquire(T valueToAnd)

Атомарное fetch-and-and.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с valueToAnd с текущим значением, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти, следующей за атомарной операцией (в порядке программы), не может быть переупорядочен перед атомарной операцией.

Функция добавлена в Qt 5.3.

См. также operator&=().

T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)

Атомарное fetch-and-and.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с valueToAnd с текущим значением, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

Функция добавлена в Qt 5.3.

См. также operator&=().

T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)

Атомарное fetch-and-and.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с valueToAnd с текущим значением, возвращая исходное значение.

Эта функция использует семантику слабого упорядочения доступа к памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

Функция добавлена в Qt 5.3.

См. также operator&=().

T QAtomicInteger::fetchAndAndRelease(T valueToAnd)

Атомарное fetch-and-and.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с valueToAnd с текущим значением, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

Функция добавлена в Qt 5.3.

См. также operator&=().

T QAtomicInteger::fetchAndOrAcquire(T valueToOr)

Атомарное fetch-and-or.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr с текущим значением, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти, следующей за атомарной операцией (в порядке программы), не может быть переупорядочен перед атомарной операцией.

Функция добавлена в Qt 5.3.

См. также operator|=().

T QAtomicInteger::fetchAndOrOrdered(T valueToOr)

Атомарное fetch-and-or.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr с текущим значением, возвращая исходное значение.

Эта функция использует семантику упорядоченного доступа к памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

Функция добавлена в Qt 5.3.

См. также operator|=().

[since 5.3] T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)

Атомарное побитовое ИЛИ.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr, возвращая исходное значение.

Эта функция использует семантику слабой модификации памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

Эта функция была добавлена в Qt 5.3.

См. также operator|=().

[since 5.3] T QAtomicInteger::fetchAndOrRelease(T valueToOr)

Атомарное побитовое ИЛИ.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr, возвращая исходное значение.

Эта функция использует семантику высвобождения модификации памяти, гарантирующую, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

Эта функция была добавлена в Qt 5.3.

См. также operator|=().

T QAtomicInteger::fetchAndStoreAcquire(T newValue)

Атомарная замена значения с приобретением.

Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.

Эта функция использует семантику приобретения модификации памяти, гарантирующую, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен до атомарной операции.

T QAtomicInteger::fetchAndStoreOrdered(T newValue)

Атомарная замена значения.

Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.

Эта функция использует семантику упорядоченной модификации памяти, гарантирующую, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

T QAtomicInteger::fetchAndStoreRelaxed(T newValue)

Атомарная замена значения со слабой модификацией.

Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.

Эта функция использует семантику слабой модификации памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

T QAtomicInteger::fetchAndStoreRelease(T newValue)

Атомарная замена значения с высвобождением.

Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.

Эта функция использует семантику высвобождения модификации памяти, гарантирующую, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

[since 5.3] T QAtomicInteger::fetchAndSubAcquire(T valueToSub)

Атомарное вычитание.

Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.

Эта функция использует семантику приобретения модификации памяти, гарантирующую, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен до атомарной операции.

Эта функция была добавлена в Qt 5.3.

См. также operator-=() и fetchAndAddAcquire().

[since 5.3] T QAtomicInteger::fetchAndSubOrdered(T valueToSub)

Атомарное вычитание.

Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.

Эта функция использует семантику упорядоченной модификации памяти, гарантирующую, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

Эта функция была добавлена в Qt 5.3.

См. также operator-=() и fetchAndAddOrdered().

[since 5.3] T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)

Атомарное вычитание со слабой модификацией.

Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.

Эта функция использует семантику слабой модификации памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

Эта функция была добавлена в Qt 5.3.

См. также operator-=() и fetchAndAddRelaxed().

[since 5.3] T QAtomicInteger::fetchAndSubRelease(T valueToSub)

Атомарное вычитание с высвобождением.

Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.

Эта функция использует семантику высвобождения модификации памяти, гарантирующую, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

Эта функция была добавлена в Qt 5.3.

См. также operator-=() и fetchAndAddRelease().

[since 5.3] T QAtomicInteger::fetchAndXorAcquire(T valueToXor)

Атомарное побитовое XOR.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.

Эта функция использует семантику приобретения модификации памяти, гарантирующую, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен до атомарной операции.

Эта функция была добавлена в Qt 5.3.

См. также operator^=().

[since 5.3] T QAtomicInteger::fetchAndXorOrdered(T valueToXor)

Атомарное побитовое XOR.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.

Эта функция использует семантику упорядоченной модификации памяти, гарантирующую, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

Эта функция была добавлена в Qt 5.3.

См. также operator^=().

[since 5.3] T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)

Атомарное побитовое XOR со слабой модификацией.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.

Эта функция использует семантику слабой модификации памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.

Эта функция была добавлена в Qt 5.3.

См. также operator^=().

[since 5.3] T QAtomicInteger::fetchAndXorRelease(T valueToXor)

Атомарное побитовое XOR с высвобождением.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.

Эта функция использует семантику высвобождения модификации памяти, гарантирующую, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

Эта функция была добавлена в Qt 5.3.

См. также operator^=().

[static] bool QAtomicInteger::isFetchAndAddNative()

Возвращает true если атомарное сложение реализовано с использованием машинных инструкций, иначе false.

[static] bool QAtomicInteger::isFetchAndAddWaitFree()

Возвращает true если атомарное сложение является бесблокирующим, иначе false.

[static] bool QAtomicInteger::isFetchAndStoreNative()

Возвращает true если атомарная замена значения реализована с использованием машинных инструкций, иначе false.

[static] bool QAtomicInteger::isFetchAndStoreWaitFree()

Возвращает true если атомарная замена значения является бесблокирующей, иначе false.

[static] bool QAtomicInteger::isReferenceCountingNative()

Возвращает true если обработка ссылок реализована с использованием машинных инструкций, иначе false.

[static] bool QAtomicInteger::isReferenceCountingWaitFree()

Возвращает true если атомарная обработка ссылок является бесблокирующей, иначе false.

[static] bool QAtomicInteger::isTestAndSetNative()

Возвращает true , если проверка и установка реализована с помощью атомарных инструкций процессора, в противном случае false.

[static] bool QAtomicInteger::isTestAndSetWaitFree()

Возвращает true , если атомарная проверка и установка является свободной от ожидания, в противном случае false.

T QAtomicInteger::loadAcquire() const

Атомарно загружает значение этого QAtomicInteger с использованием упорядочивания памяти «Acquire». Значение не изменяется никоим образом, но обратите внимание, что нет гарантии, что оно останется таким.

См. также storeRelaxed() и loadRelaxed().

[since 5.14] T QAtomicInteger::loadRelaxed() const

Атомарно загружает значение этого QAtomicInteger с использованием релаксированного упорядочивания памяти. Значение не изменяется никоим образом, но обратите внимание, что нет гарантии, что оно останется таким.

Эта функция была добавлена в Qt 5.14.

См. также storeRelaxed() и loadAcquire().

bool QAtomicInteger::ref()

Атомарно увеличивает значение этого QAtomicInteger. Возвращает true , если новое значение отлично от нуля, в противном случае false.

Эта функция использует семантику упорядоченного упорядочивания памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

См. также deref() и operator++().

[since 5.14] void QAtomicInteger::storeRelaxed(T newValue)

Атомарно сохраняет значение newValue в этот атомарный тип с использованием релаксированного упорядочивания памяти.

Эта функция была добавлена в Qt 5.14.

См. также storeRelease() и loadRelaxed().

void QAtomicInteger::storeRelease(T newValue)

Атомарно сохраняет значение newValue в этот атомарный тип с использованием упорядочивания памяти «Release».

См. также storeRelaxed() и loadAcquire().

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

Атомарная проверка и установка.

Если текущее значение этого QAtomicInteger равно expectedValue, функции проверки и установки присваивают newValue этому QAtomicInteger и возвращают true. Если значения не совпадают, эта функция ничего не делает и возвращает false.

Эта функция использует семантику приобретения упорядочивания памяти, которая гарантирует, что доступ к памяти, следующий за атомарной операцией (в порядке программы), не может быть переупорядочен до атомарной операции.

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

Атомарная проверка и установка.

Если текущее значение этого QAtomicInteger равно expectedValue, функции проверки и установки присваивают newValue этому QAtomicInteger и возвращают true. Если значения не совпадают, эта функция ничего не делает и возвращает false.

Эта функция использует семантику упорядоченного упорядочивания памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.

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

Атомарная проверка и установка.

Если текущее значение этого QAtomicInteger равно expectedValue, функции проверки и установки присваивают newValue этому QAtomicInteger и возвращают true. Если значения не совпадают, эта функция ничего не делает и возвращает false.

Эта функция использует семантику релаксированного упорядочивания памяти, оставляя компилятору и процессору свободу в переупорядочивании доступов к памяти.

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

Атомарная проверка и установка.

Если текущее значение этого QAtomicInteger равно expectedValue, функции проверки и установки присваивают newValue этому QAtomicInteger и возвращают true. Если значения не совпадают, эта функция ничего не делает и возвращает false.

Эта функция использует семантику выпуска упорядочивания памяти, которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.

[since 5.3] T QAtomicInteger::operator T() const

Атомарно загружает значение этого QAtomicInteger с использованием последовательно согласованного упорядочивания памяти, если возможно; или упорядочивания «Acquire», если нет. Значение не изменяется никоим образом, но обратите внимание, что нет гарантии, что оно останется таким.

Эта функция была добавлена в Qt 5.3.

См. также loadRelaxed() и loadAcquire().

[since 5.3] T QAtomicInteger::operator&=(T value)

Атомарное побитовое И и получение.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с value с текущим значением, возвращая новое значение.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также fetchAndAndOrdered().

[since 5.3] T QAtomicInteger::operator++()

Атомарно префиксное увеличение значения этого QAtomicInteger. Возвращает новое значение этого атомарного типа.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также ref(), operator++(int) и operator--().

[since 5.3] T QAtomicInteger::operator++(int)

Атомарно постфиксное увеличение значения этого QAtomicInteger. Возвращает старое значение этого атомарного типа.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также ref(), operator++() и operator--(int).

[since 5.3] T QAtomicInteger::operator+=(T value)

Атомарное сложение и получение.

Считывает текущее значение этого QAtomicInteger и затем добавляет value к текущему значению, возвращая новое значение.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также fetchAndAddOrdered() и operator-=().

[since 5.3] T QAtomicInteger::operator--()

Атомарно префиксное уменьшение значения этого QAtomicInteger. Возвращает новое значение этого атомарного типа.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также deref(), operator--(int) и operator++().

[since 5.3] T QAtomicInteger::operator--(int)

Атомарно постфиксное уменьшение значения этого QAtomicInteger. Возвращает старое значение этого атомарного типа.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также deref(), operator--() и operator++(int).

[since 5.3] T QAtomicInteger::operator-=(T value)

Атомарное вычитание и получение.

Считывает текущее значение этого QAtomicInteger и затем вычитает value из текущего значения, возвращая новое значение.

Эта функция использует последовательно согласованное упорядочивание памяти, если возможно; или «Ordered» упорядочивание, если нет.

Эта функция была добавлена в Qt 5.3.

См. также fetchAndSubOrdered() и operator+=().

[since 5.3] QAtomicInteger<T> &QAtomicInteger::operator=(T)

Атомарно сохраняет другое значение в этот атомарный тип, используя последовательно согласованную модель памяти, если это возможно; или модель «Release», если нет. Эта функция возвращает ссылку на этот объект.

Эта функция была добавлена в Qt 5.3.

См. также storeRelaxed() и storeRelease().

[since 5.3] T QAtomicInteger::operator^=(T value)

Атомарное побитовое исключающее ИЛИ и получение значения.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое исключающее ИЛИ с value, возвращая новое значение.

Эта функция использует последовательно согласованную модель памяти, если это возможно; или модель «Ordered», если нет.

Эта функция была добавлена в Qt 5.3.

См. также fetchAndXorOrdered().

[since 5.3] T QAtomicInteger::operator|=(T value)

Атомарное побитовое ИЛИ и получение значения.

Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с value, возвращая новое значение.

Эта функция использует последовательно согласованную модель памяти, если это возможно; или модель «Ordered», если нет.

Эта функция была добавлена в Qt 5.3.

См. также fetchAndOrOrdered().

Документация макросов

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE

Этот макрос определен тогда и только тогда, когда ваш процессор поддерживает атомарную операцию fetch-and-add для целых чисел.

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE

Этот макрос определен, когда аппаратное обеспечение не поддерживает атомарную операцию fetch-and-add для целых чисел.

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE

Этот макрос определен, когда только определённые поколения процессоров поддерживают атомарную операцию fetch-and-add для целых чисел. Используйте функцию 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, чтобы указать, что атомарная операция fetch-and-add для целых чисел является ожидаемо-безопасной (wait-free).

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE

Этот макрос определён тогда и только тогда, когда ваш процессор поддерживает атомарную операцию fetch-and-store для целых чисел.

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE

Этот макрос определён, когда аппаратное обеспечение не поддерживает атомарную операцию fetch-and-store для целых чисел.

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE

Этот макрос определён, когда только определённые поколения процессоров поддерживают атомарную операцию fetch-and-store для целых чисел. Используйте функцию 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, чтобы указать, что атомарная операция fetch-and-store для целых чисел является ожидаемо-безопасной (wait-free).

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_IS_SUPPORTED

Этот макрос определён, если атомарные целые числа размера nn (в битах) поддерживаются в данной комбинации компилятора/архитектуры. Q_ATOMIC_INT32_IS_SUPPORTED всегда определён.

nn — размер целого числа в битах (8, 16, 32 или 64).

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, чтобы указать, что управление ссылками является ожидаемо-безопасным (wait-free).

nn — размер целого числа в битах (8, 16, 32 или 64).

Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE

Этот макрос определён тогда и только тогда, когда ваш процессор поддерживает атомарную операцию 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

Этот макрос определён, когда только определённые поколения процессоров поддерживают атомарную операцию test-and-set для целых чисел. Используйте функцию 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, чтобы указать, что атомарная операция test-and-set для целых чисел является ожидаемо-безопасной (wait-free).

nn — размер целого числа в битах (8, 16, 32 или 64).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qatomicinteger.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API