Класс QAtomicInteger
шаблон <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 |
| Наследуется от: |
Открытые функции
| 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() |
Макросы
Подробное описание
Для атомных операций с указателями см. класс 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.1/qatomicinteger.html