Spec-Zone.ru › Qt 5.11

Класс QAtomicInteger

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

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

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 load() const
T loadAcquire() const
bool ref()
void store(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=(const QAtomicInteger<T> &other)
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

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

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

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

  • Расслабленный — порядок памяти не определен, что позволяет компилятору и процессору свободно переупорядочивать операции доступа к памяти.
  • Приобретение — доступ к памяти, следующий за атомарной операцией (в порядке программы), не может быть переупорядочен перед атомарной операцией.
  • Освобождение — доступ к памяти перед атомарной операцией (в порядке программы) не может быть переупорядочен после атомарной операции.
  • Определённый — комбинированная семантика приобретения и освобождения.

Сравнить и заменить

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

END_OF_DOCUMENT_MARKER

Операция, которая выполняется за постоянное время, называется атомарной. Такие операции не реализуются с использованием блокировок или циклов любого типа. Для атомарных операций, которые всегда поддерживаются и которые являются атомарными, 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(T value = 0)

Создает экземпляр QAtomicInteger по умолчанию.

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

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

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|=().

T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)

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

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

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

Эта функция была добавлена в 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 является без ожидания, в противном случае false.

[static] bool QAtomicInteger::isFetchAndStoreNative()

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

[static] bool QAtomicInteger::isFetchAndStoreWaitFree()

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

[static] bool QAtomicInteger::isReferenceCountingNative()

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

[static] bool QAtomicInteger::isReferenceCountingWaitFree()

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

[static] bool QAtomicInteger::isTestAndSetNative()

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

[static] bool QAtomicInteger::isTestAndSetWaitFree()

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

T QAtomicInteger::load() const

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

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

T QAtomicInteger::loadAcquire() const

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

См. также store() и load().

bool QAtomicInteger::ref()

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

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

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

void QAtomicInteger::store(T newValue)

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

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

void QAtomicInteger::storeRelease(T newValue)

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

См. также store() и load().

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

Атомарное test-and-set.

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

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

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

Атомарное test-and-set.

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

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

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

Атомарное test-and-set.

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

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

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

Атомарное test-and-set.

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

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

T QAtomicInteger::operator T() const

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

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

См. также load() и 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=(const QAtomicInteger<T> &other)

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

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

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

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

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

T QAtomicInteger::operator^=(T value)

Атомарное XOR и загрузка.

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

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

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

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

T QAtomicInteger::operator|=(T value)

Атомарное ИЛИ и загрузка.

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

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

Эта функция была введена в 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

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

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

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

Spec-Zone.ru

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