Класс QAtomicInteger
Класс QAtomicInteger предоставляет платформенно-независимые атомарные операции над целыми числами. Подробнее...
| Заголовок: | #include <QAtomicInteger> |
| qmake: | QT += core |
| С момента: | Qt 5.3 |
| Наследует: | QBasicAtomicInteger |
| Наследуется: |
Общедоступные функции
| QAtomicInteger(T value = 0) | |
| QAtomicInteger(const QAtomicInteger &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) |
| operator T() const | |
| T | operator&=(T valueToAnd) |
| T | operator++() |
| T | operator++(int) |
| T | operator+=(T valueToAdd) |
| T | operator--() |
| T | operator--(int) |
| T | operator-=(T valueToSub) |
| QAtomicInteger & | operator=(const QAtomicInteger &other) |
| QAtomicInteger & | operator=(T newValue) |
| T | operator^=(T valueToXor) |
| T | operator|=(T valueToOr) |
- 49 общедоступных функций, унаследованных от QBasicAtomicInteger
Статические общедоступные члены
| bool | isFetchAndAddNative() |
| bool | isFetchAndAddWaitFree() |
| bool | isFetchAndStoreNative() |
| bool | isFetchAndStoreWaitFree() |
| bool | isReferenceCountingNative() |
| bool | isReferenceCountingWaitFree() |
| bool | isTestAndSetNative() |
| bool | isTestAndSetWaitFree() |
- 8 статических публичных членов, унаследованных от QBasicAtomicInteger
Макросы
Подробное описание
Класс QAtomicInteger предоставляет платформонезависимые атомарные операции над целыми числами.
Для атомарных операций над указателями см. класс 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 не будут определены.
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 со значением value.
QAtomicInteger::QAtomicInteger(const QAtomicInteger &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)
Атомарное побитовое ИЛИ.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ с valueToOr, возвращая исходное значение.
Эта функция использует семантику release порядка памяти, которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.
Эта функция была добавлена в Qt 5.3.
См. также operator|=().
T QAtomicInteger::fetchAndStoreAcquire(T newValue)
Атомарная установка значения с заменой.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику acquire порядка памяти, которая гарантирует, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен перед атомарной операцией.
T QAtomicInteger::fetchAndStoreOrdered(T newValue)
Атомарная установка значения с заменой.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику ordered порядка памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
T QAtomicInteger::fetchAndStoreRelaxed(T newValue)
Атомарная установка значения с заменой.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику relaxed порядка памяти, позволяя компилятору и процессору свободно переупорядочивать доступ к памяти.
T QAtomicInteger::fetchAndStoreRelease(T newValue)
Атомарная установка значения с заменой.
Считывает текущее значение этого QAtomicInteger и затем присваивает ему newValue, возвращая исходное значение.
Эта функция использует семантику release порядка памяти, которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.
T QAtomicInteger::fetchAndSubAcquire(T valueToSub)
Атомарное вычитание.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику acquire порядка памяти, которая гарантирует, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен перед атомарной операцией.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddAcquire().
T QAtomicInteger::fetchAndSubOrdered(T valueToSub)
Атомарное вычитание.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику ordered порядка памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddOrdered().
T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)
Атомарное вычитание.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику relaxed порядка памяти, позволяя компилятору и процессору свободно переупорядочивать доступ к памяти.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddRelaxed().
T QAtomicInteger::fetchAndSubRelease(T valueToSub)
Атомарное вычитание.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая исходное значение.
Эта функция использует семантику release порядка памяти, которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.
Эта функция была добавлена в Qt 5.3.
См. также operator-=() и fetchAndAddRelease().
T QAtomicInteger::fetchAndXorAcquire(T valueToXor)
Атомарное побитовое исключающее ИЛИ.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое исключающее ИЛИ с valueToXor, возвращая исходное значение.
Эта функция использует семантику acquire порядка памяти, которая гарантирует, что доступ к памяти после атомарной операции (в порядке программы) не может быть переупорядочен перед атомарной операцией.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorOrdered(T valueToXor)
Атомарное побитовое исключающее ИЛИ.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое исключающее ИЛИ с valueToXor, возвращая исходное значение.
Эта функция использует семантику ordered порядка памяти, которая гарантирует, что доступ к памяти до и после атомарной операции (в порядке программы) не может быть переупорядочен.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)
Атомарное побитовое исключающее ИЛИ.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое исключающее ИЛИ с valueToXor, возвращая исходное значение.
Эта функция использует семантику relaxed порядка памяти, позволяя компилятору и процессору свободно переупорядочивать доступ к памяти.
Эта функция была добавлена в Qt 5.3.
См. также operator^=().
T QAtomicInteger::fetchAndXorRelease(T valueToXor)
Атомарное побитовое исключающее ИЛИ.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое исключающее ИЛИ с 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". Значение не изменяется никоим образом, но следует учесть, что нет гарантии, что оно останется неизменным.
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.
Эта функция использует семантику порядка памяти "release", которая гарантирует, что доступ к памяти до атомарной операции (в порядке программы) не может быть переупорядочен после атомарной операции.
QAtomicInteger::operator T() const
Атомарно загружает значение этого QAtomicInteger с использованием последовательно согласованного порядка памяти, если это возможно; в противном случае используется порядок "Acquire". Значение не изменяется никоим образом, но следует учесть, что нет гарантии, что оно останется неизменным.
Эта функция была добавлена в Qt 5.3.
См. также load() и loadAcquire().
T QAtomicInteger::operator&=(T valueToAnd)
Атомарное побитовое И и загрузка.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое И с valueToAnd, возвращая новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; в противном случае используется порядок "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 valueToAdd)
Атомарное сложение и загрузка.
Считывает текущее значение этого QAtomicInteger и затем складывает valueToAdd с текущим значением, возвращая новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; в противном случае используется порядок "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 valueToSub)
Атомарное вычитание и загрузка.
Считывает текущее значение этого QAtomicInteger и затем вычитает valueToSub из текущего значения, возвращая новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; в противном случае используется порядок "Ordered".
Эта функция была добавлена в Qt 5.3.
См. также fetchAndSubOrdered() и operator+=().
QAtomicInteger &QAtomicInteger::operator=(const QAtomicInteger &other)
Присваивает other этому QAtomicInteger и возвращает ссылку на этот QAtomicInteger.
QAtomicInteger &QAtomicInteger::operator=(T newValue)
Атомарно сохраняет значение newValue в этот атомарный тип с использованием последовательно согласованного порядка памяти, если это возможно; в противном случае используется порядок "Release". Функция возвращает ссылку на этот объект.
Эта функция была добавлена в Qt 5.3.
См. также store() и storeRelease().
T QAtomicInteger::operator^=(T valueToXor)
Атомарное побитовое XOR и загрузка.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое XOR с valueToXor, возвращая новое значение.
Эта функция использует последовательно согласованный порядок памяти, если это возможно; в противном случае используется порядок "Ordered".
Эта функция была добавлена в Qt 5.3.
См. также fetchAndXorOrdered().
T QAtomicInteger::operator|=(T valueToOr)
Атомарное побитовое ИЛИ и загрузка.
Считывает текущее значение этого QAtomicInteger и затем выполняет побитовое ИЛИ valueToOr с текущим значением, возвращая новое значение.
Эта функция использует последовательно согласованную модель памяти, если это возможно; или модель «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::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::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::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::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.6/qatomicinteger.html