Spec-Zone.ru › Qt 5.15

Класс QAtomicInteger

шаблон <typename T> класс QAtomicInteger

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

Заголовок: #include <QAtomicInteger>
qmake: QT += core
С момента: Qt 5.3
Наследуется от:

QAtomicInt

Этот класс был представлен в Qt 5.3.

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

Открытые функции

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 предоставляет атомарный механизм подсчета ссылок, test-and-set, fetch-and-store и fetch-and-add для целых чисел.

Шаблонный параметр 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 предоставляет несколько реализаций атомарных функций test-and-set, fetch-and-store и fetch-and-add. Каждая реализация определяет семантику порядка памяти, описывающую, как процессор выполняет доступ к памяти, окружающий атомарную инструкцию. Поскольку многие современные архитектуры допускают выполнение операций вне очереди и порядок памяти, использование правильной семантики необходимо для обеспечения корректной работы вашего приложения на всех процессорах.

  • Relaxed - порядок памяти не определён, что позволяет компилятору и процессору свободно переупорядочивать доступ к памяти.
  • Acquire - доступ к памяти, следующий за атомарной операцией (в порядке программы), не может быть переупорядочен перед атомарной операцией.
  • Release - доступ к памяти перед атомарной операцией (в порядке программы) не может быть переупорядочен после атомарной операции.
  • Ordered - сочетание семантики Acquire и Release.

Test-and-set

Если текущее значение QAtomicInteger равно ожидаемому значению, функции test-and-set присваивают новое значение QAtomicInteger и возвращают true. Если значения не совпадают, эти функции ничего не делают и возвращают false. Эта операция эквивалентна следующему коду:

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

Существует 4 функции test-and-set: testAndSetRelaxed(), testAndSetAcquire(), testAndSetRelease(), и testAndSetOrdered(). См. выше объяснение различных семантик порядка памяти.

Fetch-and-store

Атомарные функции fetch-and-store считывают текущее значение QAtomicInteger, а затем присваивают новое значение, возвращая исходное значение. Эта операция эквивалентна следующему коду:

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

Существует 4 функции fetch-and-store: fetchAndStoreRelaxed(), fetchAndStoreAcquire(), fetchAndStoreRelease(), и fetchAndStoreOrdered(). См. выше объяснение различных семантик порядка памяти.

Fetch-and-add

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

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

Существует 4 функции fetch-and-add: 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 к текущему значению, возвращая исходное значение.

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

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

T QAtomicInteger::fetchAndAddOrdered(T valueToAdd)

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

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

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

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

T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd)

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

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

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

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

T QAtomicInteger::fetchAndAddRelease(T valueToAdd)

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

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

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

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

T QAtomicInteger::fetchAndAndAcquire(T valueToAnd)

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

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

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

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

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

T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)

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

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

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

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

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

T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)

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

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

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

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

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

T QAtomicInteger::fetchAndAndRelease(T valueToAnd)

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

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

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

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

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

T QAtomicInteger::fetchAndOrAcquire(T valueToOr)

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

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

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

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

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

T QAtomicInteger::fetchAndOrOrdered(T valueToOr)

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

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

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

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

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

T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)

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

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

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

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

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

T QAtomicInteger::fetchAndOrRelease(T valueToOr)

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

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

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

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

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

T QAtomicInteger::fetchAndStoreAcquire(T newValue)

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

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

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

T QAtomicInteger::fetchAndStoreOrdered(T newValue)

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

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

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

T QAtomicInteger::fetchAndStoreRelaxed(T newValue)

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

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

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

T QAtomicInteger::fetchAndStoreRelease(T newValue)

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

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

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

T QAtomicInteger::fetchAndSubAcquire(T valueToSub)

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

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

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

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

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

T QAtomicInteger::fetchAndSubOrdered(T valueToSub)

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

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

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

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

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

T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)

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

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

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

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

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

T QAtomicInteger::fetchAndSubRelease(T valueToSub)

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

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

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

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

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

T QAtomicInteger::fetchAndXorAcquire(T valueToXor)

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

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

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

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

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

T QAtomicInteger::fetchAndXorOrdered(T valueToXor)

Атомное fetch-and-xor.

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

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

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

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

T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)

Атомное fetch-and-xor.

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

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

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

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

T QAtomicInteger::fetchAndXorRelease(T valueToXor)

Атомное fetch-and-xor.

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

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

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

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

[static] bool QAtomicInteger::isFetchAndAddNative()

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

[static] bool QAtomicInteger::isFetchAndAddWaitFree()

Возвращает true, если атомное fetch-and-add является wait-free, в противном случае — false.

[static] bool QAtomicInteger::isFetchAndStoreNative()

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

[static] bool QAtomicInteger::isFetchAndStoreWaitFree()

Возвращает true, если атомное fetch-and-store является wait-free, в противном случае — false.

[static] bool QAtomicInteger::isReferenceCountingNative()

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

[static] bool QAtomicInteger::isReferenceCountingWaitFree()

Возвращает true, если атомный подсчёт ссылок является wait-free, в противном случае — false.

[static] bool QAtomicInteger::isTestAndSetNative()

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

[static] bool QAtomicInteger::isTestAndSetWaitFree()

Возвращает true, если атомное test-and-set является wait-free, в противном случае — false.

T QAtomicInteger::loadAcquire() const

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

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

T QAtomicInteger::loadRelaxed() const

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

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

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

bool QAtomicInteger::ref()

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

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

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

void QAtomicInteger::storeRelaxed(T newValue)

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

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

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

void QAtomicInteger::storeRelease(T newValue)

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

См. также store() и 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.

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

T QAtomicInteger::operator T() const

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

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

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

T QAtomicInteger::operator&=(T value)

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

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

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

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

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

T QAtomicInteger::operator++()

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

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

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

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

T QAtomicInteger::operator++(int)

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

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

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

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

T QAtomicInteger::operator+=(T value)

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

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

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

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

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

T QAtomicInteger::operator--()

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

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

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

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

T QAtomicInteger::operator--(int)

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

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

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

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

T QAtomicInteger::operator-=(T value)

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

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

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

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

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

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

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

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

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

T QAtomicInteger::operator^=(T value)

Атомарное XOR-и и получение.

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

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

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

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

T QAtomicInteger::operator|=(T value)

Атомарное OR-и и получение.

Считывает текущее значение этого QAtomicInteger, затем выполняет побитовое OR 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 для целых чисел является ожидаемо-безопасной.

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 для целых чисел является ожидаемо-безопасной.

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 для обозначения того, что подсчёт ссылок является ожидаемо-безопасным.

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

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

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

Spec-Zone.ru

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