Класс QAtomicInteger
Класс QAtomicInteger предоставляет платформенно-независимые атомарные операции над целыми числами. Подробнее...
| Заголовок: | #include <QAtomicInteger> |
| qmake: | QT += core |
| С тех пор: | Qt 5.3 |
| Наследует: | QBasicAtomicInteger |
| Наследуется от: |
Этот класс был представлен в Qt 5.3.
Открытые функции
| QAtomicInteger(const QAtomicInteger<T> &other) | |
| 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) |
Статические открытые члены
| bool | isFetchAndAddNative() |
| bool | isFetchAndAddWaitFree() |
| bool | isFetchAndStoreNative() |
| bool | isFetchAndStoreWaitFree() |
| bool | isReferenceCountingNative() |
| bool | isReferenceCountingWaitFree() |
| bool | isTestAndSetNative() |
| bool | isTestAndSetWaitFree() |
Макросы
Подробное описание
Для атомарных операций с указателями см. класс 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<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 и выполняет поразрядную операцию AND с valueToAnd, возвращая исходное значение.
Эта функция использует семантику порядка памяти acquire, которая гарантирует, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен до атомарной операции.
Эта функция была введена в Qt 5.3.
См. также operator&=().
T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)
Атомарная операция fetch-and-and.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию AND с valueToAnd, возвращая исходное значение.
Эта функция использует семантику порядка памяти ordered, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
Эта функция была введена в Qt 5.3.
См. также operator&=().
T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)
Атомарная операция fetch-and-and.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию AND с valueToAnd, возвращая исходное значение.
Эта функция использует семантику порядка памяти relaxed, позволяя компилятору и процессору свободно переупорядочивать доступ к памяти.
Эта функция была введена в Qt 5.3.
См. также operator&=().
T QAtomicInteger::fetchAndAndRelease(T valueToAnd)
Атомарная операция fetch-and-and.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию AND с valueToAnd, возвращая исходное значение.
Эта функция использует семантику порядка памяти release, которая гарантирует, что доступ к памяти перед атомарной операцией (в порядке программы) не может быть переупорядочен после атомарной операции.
Эта функция была введена в Qt 5.3.
См. также operator&=().
T QAtomicInteger::fetchAndOrAcquire(T valueToOr)
Атомарная операция fetch-and-or.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию OR с valueToOr, возвращая исходное значение.
Эта функция использует семантику порядка памяти acquire, которая гарантирует, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен до атомарной операции.
Эта функция была введена в Qt 5.3.
См. также operator|=().
T QAtomicInteger::fetchAndOrOrdered(T valueToOr)
Атомарная операция fetch-and-or.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию OR с valueToOr, возвращая исходное значение.
Эта функция использует семантику порядка памяти ordered, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
Эта функция была введена в Qt 5.3.
См. также operator|=().
T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)
Атомарная операция fetch-and-or.
Считывает текущее значение этого QAtomicInteger и выполняет поразрядную операцию OR с valueToOr, возвращая исходное значение.
Эта функция использует семантику слабой последовательности памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.
Эта функция была добавлена в Qt 5.3.
См. также operator|=().
T QAtomicInteger::fetchAndOrRelease(T valueToOr)
Атомарное выполнение fetch-and-or.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr, возвращая исходное значение.
Эта функция использует семантику разрешения последовательности памяти, которая гарантирует, что обращения к памяти перед атомарной операцией (в порядке программы) не могут быть переупорядочены после атомарной операции.
Эта функция была добавлена в Qt 5.3.
См. также operator|=().
T QAtomicInteger::fetchAndStoreAcquire(T newValue)
Атомарное выполнение fetch-and-store.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику захвата последовательности памяти, которая гарантирует, что обращения к памяти после атомарной операции (в порядке программы) не могут быть переупорядочены перед атомарной операцией.
T QAtomicInteger::fetchAndStoreOrdered(T newValue)
Атомарное выполнение fetch-and-store.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику упорядочивания последовательности памяти, которая гарантирует, что обращения к памяти перед и после атомарной операции (в порядке программы) не могут быть переупорядочены.
T QAtomicInteger::fetchAndStoreRelaxed(T newValue)
Атомарное выполнение fetch-and-store.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику слабой последовательности памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.
T QAtomicInteger::fetchAndStoreRelease(T newValue)
Атомарное выполнение fetch-and-store.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику разрешения последовательности памяти, которая гарантирует, что обращения к памяти перед атомарной операцией (в порядке программы) не могут быть переупорядочены после атомарной операции.
T QAtomicInteger::fetchAndSubAcquire(T valueToSub)
Атомарное выполнение fetch-and-sub.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику захвата последовательности памяти, которая гарантирует, что обращения к памяти после атомарной операции (в порядке программы) не могут быть переупорядочены перед атомарной операцией.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddAcquire().
T QAtomicInteger::fetchAndSubOrdered(T valueToSub)
Атомарное выполнение fetch-and-sub.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику упорядочивания последовательности памяти, которая гарантирует, что обращения к памяти перед и после атомарной операции (в порядке программы) не могут быть переупорядочены.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddOrdered().
T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)
Атомарное выполнение fetch-and-sub.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику слабой последовательности памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddRelaxed().
T QAtomicInteger::fetchAndSubRelease(T valueToSub)
Атомарное выполнение fetch-and-sub.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику разрешения последовательности памяти, которая гарантирует, что обращения к памяти перед атомарной операцией (в порядке программы) не могут быть переупорядочены после атомарной операции.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddRelease().
T QAtomicInteger::fetchAndXorAcquire(T valueToXor)
Атомарное выполнение fetch-and-xor.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.
Эта функция использует семантику захвата последовательности памяти, которая гарантирует, что обращения к памяти после атомарной операции (в порядке программы) не могут быть переупорядочены перед атомарной операцией.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorOrdered(T valueToXor)
Атомарное выполнение fetch-and-xor.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.
Эта функция использует семантику упорядочивания последовательности памяти, которая гарантирует, что обращения к памяти перед и после атомарной операции (в порядке программы) не могут быть переупорядочены.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)
Атомарное выполнение fetch-and-xor.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.
Эта функция использует семантику слабой последовательности памяти, позволяя компилятору и процессору свободно переупорядочивать обращения к памяти.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorRelease(T valueToXor)
Атомарное выполнение fetch-and-xor.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая исходное значение.
Эта функция использует семантику разрешения последовательности памяти, которая гарантирует, что обращения к памяти перед атомарной операцией (в порядке программы) не могут быть переупорядочены после атомарной операции.
Эта функция была добавлена в 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::load() const
Атомарно загружает значение данного QAtomicInteger с использованием слабого порядка памяти. Значение не изменяется никоим образом, но следует учитывать, что нет гарантии, что оно останется неизменным.
См. также store() и loadAcquire().
T QAtomicInteger::loadAcquire() const
Атомарно загружает значение данного QAtomicInteger с использованием порядка памяти «Acquire». Значение не изменяется никоим образом, но следует учитывать, что нет гарантии, что оно останется неизменным.
bool QAtomicInteger::ref()
Атомарно увеличивает значение данного QAtomicInteger. Возвращает true, если новое значение не равно нулю, в противном случае — false.
Данная функция использует семантику упорядоченного порядка памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
См. также deref() и operator++().
void QAtomicInteger::store(T newValue)
Атомарно сохраняет значение newValue в этот атомарный тип с использованием слабого порядка памяти.
См. также storeRelease() и load().
void QAtomicInteger::storeRelease(T newValue)
Атомарно сохраняет значение newValue в этот атомарный тип с использованием порядка памяти «Release».
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.
См. также load() и loadAcquire().
T QAtomicInteger::operator&=(T value)
Атомарное побитовое И и загрузка.
Считывает текущее значение этого QAtomicInteger, затем выполняет побитовое И с value и возвращает новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также fetchAndAndOrdered().
T QAtomicInteger::operator++()
Атомарно префиксное увеличение значения этого QAtomicInteger. Возвращает новое значение этого атома.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также ref(), operator++(int) и operator--().
T QAtomicInteger::operator++(int)
Атомарно постфиксное увеличение значения этого QAtomicInteger. Возвращает старое значение этого атома.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также ref(), operator++() и operator--(int).
T QAtomicInteger::operator+=(T value)
Атомарное сложение и загрузка.
Считывает текущее значение этого QAtomicInteger, затем прибавляет value к текущему значению и возвращает новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также fetchAndAddOrdered() и operator-=().
T QAtomicInteger::operator--()
Атомарно префиксное уменьшение значения этого QAtomicInteger. Возвращает новое значение этого атома.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также deref(), operator--(int) и operator++().
T QAtomicInteger::operator--(int)
Атомарно постфиксное уменьшение значения этого QAtomicInteger. Возвращает старое значение этого атома.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также deref(), operator--() и operator++(int).
T QAtomicInteger::operator-=(T value)
Атомарное вычитание и загрузка.
Считывает текущее значение этого QAtomicInteger, затем вычитает value из текущего значения и возвращает новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также fetchAndSubOrdered() и operator+=().
QAtomicInteger<T> &QAtomicInteger::operator=(T)
Атомарно сохраняет другое значение в этот атомарный тип с использованием последовательно согласованного порядка памяти, если это возможно; или порядка «Release», если нет. Эта функция возвращает ссылку на этот объект.
Эта функция была добавлена в Qt 5.3.
См. также store() и storeRelease().
T QAtomicInteger::operator^=(T value)
Атомарное XOR и загрузка.
Считывает текущее значение этого QAtomicInteger, затем выполняет побитовое XOR с value и возвращает новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была добавлена в Qt 5.3.
См. также fetchAndXorOrdered().
T QAtomicInteger::operator|=(T value)
Атомарное побитовое ИЛИ и загрузка.
Считывает текущее значение этого QAtomicInteger, затем выполняет побитовое ИЛИ с value и возвращает новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; или «упорядоченный» порядок, если нет.
Эта функция была представлена в Qt 5.3.
См. также fetchAndOrOrdered().
Документация макросов
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_ALWAYS_NATIVE
Этот макрос определён тогда и только тогда, когда ваш процессор поддерживает атомную операцию fetch-and-add для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_NOT_NATIVE
Этот макрос определён, когда аппаратное обеспечение не поддерживает атомную операцию fetch-and-add для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
Этот макрос определён, когда только определённые поколения процессоров поддерживают атомную операцию fetch-and-add для целых чисел. Используйте функцию QAtomicInteger<T>::isFetchAndAddNative() для проверки, что поддерживает ваш процессор.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::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).
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_ALWAYS_NATIVE
Этот макрос определён тогда и только тогда, когда ваш процессор поддерживает атомную операцию fetch-and-store для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_NOT_NATIVE
Этот макрос определён, когда аппаратное обеспечение не поддерживает атомную операцию fetch-and-store для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
Этот макрос определён, когда только определённые поколения процессоров поддерживают атомную операцию fetch-and-store для целых чисел. Используйте функцию QAtomicInteger<T>::isFetchAndStoreNative() для проверки, что поддерживает ваш процессор.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::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).
QAtomicInteger::Q_ATOMIC_INTnn_IS_SUPPORTED
Этот макрос определён, если атомные целые числа размера nn (в битах) поддерживаются данной комбинацией компилятора/архитектуры. Q_ATOMIC_INT32_IS_SUPPORTED всегда определён.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
Этот макрос определён тогда и только тогда, когда все поколения вашего процессора поддерживают атомный счётчик ссылок.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_NOT_NATIVE
Этот макрос определён, когда аппаратное обеспечение не поддерживает атомный счётчик ссылок.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE
Этот макрос определён, когда только определённые поколения процессоров поддерживают атомный счётчик ссылок. Используйте функцию QAtomicInteger<T>::isReferenceCountingNative() для проверки, что поддерживает ваш процессор.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_WAIT_FREE
Этот макрос определён вместе с Q_ATOMIC_INTnn_REFERENCE_COUNTING_IS_ALWAYS_NATIVE для указания того, что счётчик ссылок является ожидаемо-свободным.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_TEST_AND_SET_IS_ALWAYS_NATIVE
Этот макрос определён тогда и только тогда, когда ваш процессор поддерживает атомную операцию test-and-set для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_TEST_AND_SET_IS_NOT_NATIVE
Этот макрос определён, когда аппаратное обеспечение не поддерживает атомную операцию test-and-set для целых чисел.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::Q_ATOMIC_INTnn_TEST_AND_SET_IS_SOMETIMES_NATIVE
Этот макрос определён, когда только определённые поколения процессоров поддерживают атомную операцию test-and-set для целых чисел. Используйте функцию QAtomicInteger<T>::isTestAndSetNative() для проверки, что поддерживает ваш процессор.
nn — размер целого числа в битах (8, 16, 32 или 64).
QAtomicInteger::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/qt-5.13/qatomicinteger.html