QAtomicPointer Class
template <typename T> class QAtomicPointerDie Klasse „QAtomicPointer“ ist eine Template-Klasse, die plattformunabhängige atomare Operationen auf Zeigern ermöglicht. Mehr...
| Header: | #include <QAtomicPointer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QAtomicPointer ist Teil der Threading-Klassen.
Öffentliche Funktionen
| QAtomicPointer(T *value = nullptr) | |
| QAtomicPointer(const QAtomicPointer<T> &other) | |
| T * | fetchAndAddAcquire(qptrdiff valueToAdd) |
| T * | fetchAndAddOrdered(qptrdiff valueToAdd) |
| T * | fetchAndAddRelaxed(qptrdiff valueToAdd) |
| T * | fetchAndAddRelease(qptrdiff valueToAdd) |
| T * | fetchAndStoreAcquire(T *newValue) |
| T * | fetchAndStoreOrdered(T *newValue) |
| T * | fetchAndStoreRelaxed(T *newValue) |
| T * | fetchAndStoreRelease(T *newValue) |
| T * | loadAcquire() const |
| T * | loadRelaxed() const |
| void | storeRelaxed(T *newValue) |
| void | storeRelease(T *newValue) |
| bool | testAndSetAcquire(T *expectedValue, T *newValue) |
| bool | testAndSetAcquire(T *expectedValue, T *newValue, T *¤tValue) |
| bool | testAndSetOrdered(T *expectedValue, T *newValue) |
| bool | testAndSetOrdered(T *expectedValue, T *newValue, T *¤tValue) |
| bool | testAndSetRelaxed(T *expectedValue, T *newValue) |
| bool | testAndSetRelaxed(T *expectedValue, T *newValue, T *¤tValue) |
| bool | testAndSetRelease(T *expectedValue, T *newValue) |
| bool | testAndSetRelease(T *expectedValue, T *newValue, T *¤tValue) |
| QAtomicPointer<T> & | operator=(const QAtomicPointer<T> &other) |
Statische öffentliche Mitglieder
| bool | isFetchAndAddNative() |
| bool | isFetchAndAddWaitFree() |
| bool | isFetchAndStoreNative() |
| bool | isFetchAndStoreWaitFree() |
| bool | isTestAndSetNative() |
| bool | isTestAndSetWaitFree() |
Makros
Ausführliche Beschreibung
Informationen zu atomaren Operationen mit Ganzzahlen finden Sie in der Klasse „ QAtomicInteger “.
Eine atomare Operation ist eine komplexe Operation, die ohne Unterbrechung ausgeführt wird. Die Klasse „QAtomicPointer“ bietet atomare „Test-and-Set“--, „Fetch-and-Store“- und „Fetch-and-Add“-Operationen für Zeiger. Der Template-Parameter „ T “ gibt den Typ des Zeigeziels an.
Die Atomic-API
Speicherreihenfolge
QAtomicPointer bietet mehrere Implementierungen der atomaren Funktionen „Test-and-Set“, „Fetch-and-Store“ und „Fetch-and-Add“. Jede Implementierung definiert eine Semantik der Speicherreihenfolge, die beschreibt, wie Speicherzugriffe rund um die atomare Anweisung vom Prozessor ausgeführt werden. Da viele moderne Architekturen eine Out-of-Order-Ausführung und eine flexible Speicherreihenfolge zulassen, ist die Verwendung der richtigen Semantik erforderlich, um sicherzustellen, dass Ihre Anwendung auf allen Prozessoren ordnungsgemäß funktioniert.
- „Relaxed“ – Die Speicherreihenfolge ist nicht spezifiziert, sodass Compiler und Prozessor die Speicherzugriffe frei neu anordnen können.
- „Acquire“ – Speicherzugriffe, die auf die atomare Operation folgen (in Programmreihenfolge), dürfen nicht vor die atomare Operation umgeordnet werden.
- „Release“ – Speicherzugriffe vor der atomaren Operation (in Programmreihenfolge) dürfen nicht nach der atomaren Operation neu angeordnet werden.
- „Ordered“ – eine Kombination aus der „Acquire“- und der „Release“-Semantik.
Test-and-Set
Wenn der aktuelle Wert des QAtomicPointer einem erwarteten Wert entspricht, weisen die Test-and-Set-Funktionen dem QAtomicPointer einen neuen Wert zu und geben „true“ zurück. Stimmen die Werte nicht überein, führen diese Funktionen keine Aktion aus und geben „false“ zurück. Diese Operation entspricht dem folgenden Code:
if (currentValue == expectedValue) {
currentValue = newValue;
return true;
}
return false;Es gibt vier „Test-and-Set“-Funktionen: ` testAndSetRelaxed()`, ` testAndSetAcquire()`, ` testAndSetRelease()` und ` testAndSetOrdered()`. Eine Erläuterung der verschiedenen Semantiken der Speicherreihenfolge finden Sie weiter oben.
Fetch-and-Store
Die atomaren „Fetch-and-Store“-Funktionen lesen den aktuellen Wert des `QAtomicPointer` aus, weisen ihm dann einen neuen Wert zu und geben den ursprünglichen Wert zurück. Diese Operation entspricht dem folgenden Code:
T *originalValue = currentValue;
currentValue = newValue;
return originalValue;Es gibt 4 „Fetch-and-Store“-Funktionen: fetchAndStoreRelaxed(), fetchAndStoreAcquire(), fetchAndStoreRelease() und fetchAndStoreOrdered(). Eine Erläuterung der verschiedenen Semantiken der Speicherreihenfolge finden Sie weiter oben.
Fetch-and-Add
Die atomaren „Fetch-and-Add“-Funktionen lesen den aktuellen Wert des `QAtomicPointer`, addieren dann den angegebenen Wert zum aktuellen Wert und geben den ursprünglichen Wert zurück. Diese Operation entspricht dem folgenden Code:
T *originalValue = currentValue;
currentValue += valueToAdd;
return originalValue;Es gibt 4 „Fetch-and-Add“-Funktionen: fetchAndAddRelaxed(), fetchAndAddAcquire(), fetchAndAddRelease() und fetchAndAddOrdered(). Eine Erläuterung der verschiedenen Semantiken der Speicherreihenfolge finden Sie weiter oben.
Funktionstests für die Atomic-API
Die Bereitstellung einer plattformunabhängigen atomaren API, die auf allen Prozessoren funktioniert, ist eine Herausforderung. Die von QAtomicPointer bereitgestellte API funktioniert garantiert atomar auf allen Prozessoren. Da jedoch nicht alle Prozessoren Unterstützung für jede von QAtomicPointer bereitgestellte Operation implementieren, ist es notwendig, Informationen über den Prozessor bereitzustellen.
Sie können zur Kompilierungszeit mithilfe verschiedener Makros überprüfen, welche Funktionen auf Ihrer Hardware unterstützt werden. Diese geben an, ob Ihre Hardware eine bestimmte Operation immer, manchmal oder gar nicht unterstützt. Die Makros haben die FormQ_ATOMIC_POINTER_OPERATION_IS_HOW_NATIVE. OPERATION ist entweder „ TEST_AND_SET “, „ FETCH_AND_STORE “ oder „ FETCH_AND_ADD “, und HOW ist entweder „ALWAYS“, „SOMETIMES“ oder „NOT“. Pro Operation ist immer genau ein Makro definiert. Ist beispielsweise „ Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE “ definiert, sind weder „ Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE “ noch „ Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE “ definiert.
Eine Operation, die in konstanter Zeit abgeschlossen wird, wird als wartungsfrei bezeichnet. Solche Operationen werden ohne Sperren oder Schleifen jeglicher Art implementiert. Für atomare Operationen, die immer unterstützt werden und wartungsfrei sind, definiert Qt zusätzlich zu `Q_ATOMIC_POINTER_OPERATION_IS_ALWAYS_NATIVE` auch `Q_ATOMIC_POINTER_OPERATION_IS_WAIT_FREE`.
In Fällen, in denen eine atomare Operation nur in neueren Prozessorgenerationen unterstützt wird, bietet QAtomicPointer mit den Funktionen ` isTestAndSetNative()`, ` isFetchAndStoreNative()` und ` isFetchAndAddNative()` zudem die Möglichkeit, zur Laufzeit zu prüfen, was Ihre Hardware unterstützt. Wartefreie Implementierungen lassen sich mithilfe der Funktionen ` isTestAndSetWaitFree()`, ` isFetchAndStoreWaitFree()` und ` isFetchAndAddWaitFree()` erkennen.
Nachfolgend finden Sie eine vollständige Liste aller Feature-Makros für QAtomicPointer:
- Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
- Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE
- Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE
- Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE
- Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE
- Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE
- Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE
Siehe auch „ QAtomicInteger “ und „ qYieldCpu “ ().
Dokumentation zu den Mitgliedsfunktionen
[constexpr noexcept] QAtomicPointer::QAtomicPointer(T *value = nullptr)
Erstellt einen `QAtomicPointer` mit dem angegebenen ` value`.
[noexcept] QAtomicPointer::QAtomicPointer(const QAtomicPointer<T> &other)
Erstellt eine Kopie von „ other “.
T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd)
Atomares „Fetch-and-Add“.
Liest den aktuellen Wert dieses „ QAtomicPointer “ und addiert dann „ valueToAdd “ zum aktuellen Wert, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „Acquire- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe, die (in Programmreihenfolge) auf die atomare Operation folgen, nicht vor der atomaren Operation neu geordnet werden dürfen.
T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd)
Atomares „Fetch-and-Add“.
Liest den aktuellen Wert dieses „ QAtomicPointer “ und addiert dann „ valueToAdd “ zum aktuellen Wert, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die Semantik „ordered memory ordering “, die sicherstellt, dass Speicherzugriffe vor und nach der atomaren Operation (in Programmreihenfolge) nicht neu angeordnet werden dürfen.
T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd)
Atomares „Fetch-and-Add“.
Liest den aktuellen Wert dieses „ QAtomicPointer “ und addiert dann „ valueToAdd “ zum aktuellen Wert, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „relaxed“ Semantik von „ memory ordering “, sodass der Compiler und der Prozessor die Speicherzugriffe frei neu anordnen können.
T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd)
Atomares „Fetch-and-Add“.
Liest den aktuellen Wert dieses QAtomicPointer s und addiert dann valueToAdd zum aktuellen Wert, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „Release- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe vor der atomaren Operation (in Programmreihenfolge) nach der atomaren Operation nicht neu angeordnet werden dürfen.
T *QAtomicPointer::fetchAndStoreAcquire(T *newValue)
Atomares Fetch-and-Store.
Liest den aktuellen Wert dieses QAtomicPointer s und weist ihm anschließend den Wert newValue zu, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „Acquire- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe, die (in Programmreihenfolge) auf die atomare Operation folgen, nicht vor der atomaren Operation neu angeordnet werden dürfen.
T *QAtomicPointer::fetchAndStoreOrdered(T *newValue)
Atomares Fetch-and-Store.
Liest den aktuellen Wert dieses „ QAtomicPointer “ und weist ihm anschließend den „ newValue “ zu, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die Semantik „ordered memory ordering “, die sicherstellt, dass Speicherzugriffe vor und nach der atomaren Operation (in Programmreihenfolge) nicht neu geordnet werden dürfen.
T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue)
Atomares Abrufen und Speichern.
Liest den aktuellen Wert dieses „ QAtomicPointer “ und weist ihm anschließend den Wert „ newValue “ zu, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „relaxed“ Semantik von „ memory ordering “, sodass der Compiler und der Prozessor die Speicherzugriffe frei neu anordnen können.
T *QAtomicPointer::fetchAndStoreRelease(T *newValue)
Atomares Fetch-and-Store.
Liest den aktuellen Wert dieses QAtomicPointer s und weist ihm anschließend den Wert newValue zu, wobei der ursprüngliche Wert zurückgegeben wird.
Diese Funktion verwendet die „Release- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe vor der atomaren Operation (in Programmreihenfolge) nach der atomaren Operation nicht neu geordnet werden dürfen.
[static constexpr] bool QAtomicPointer::isFetchAndAddNative()
Gibt „ true “ zurück, wenn „fetch-and-add“ mithilfe atomarer Prozessorbefehle implementiert ist; andernfalls „false“.
[static constexpr] bool QAtomicPointer::isFetchAndAddWaitFree()
Gibt „ true “ zurück, wenn das atomare „Fetch-and-Add“-Operation wartungsfrei ist, andernfalls „false“.
[static constexpr] bool QAtomicPointer::isFetchAndStoreNative()
Gibt „ true “ zurück, wenn „fetch-and-store“ mithilfe atomarer Prozessorbefehle implementiert ist, andernfalls „false“.
[static constexpr] bool QAtomicPointer::isFetchAndStoreWaitFree()
Gibt „ true “ zurück, wenn das atomare „Fetch-and-Store“-Vorgang wartungsfrei ist, andernfalls „false“.
[static constexpr] bool QAtomicPointer::isTestAndSetNative()
Gibt „ true “ zurück, wenn „test-and-set“ mithilfe atomarer Prozessorbefehle implementiert ist, andernfalls „false“.
[static constexpr] bool QAtomicPointer::isTestAndSetWaitFree()
Gibt „ true “ zurück, wenn das atomare „Test-and-Set“ wartungsfrei ist, andernfalls „false“.
T *QAtomicPointer::loadAcquire() const
Lädt den Wert dieses ` QAtomicPointer ` atomar unter Verwendung der Speicherreihenfolge „Acquire“. Der Wert wird in keiner Weise verändert, es gibt jedoch keine Garantie dafür, dass er unverändert bleibt.
Siehe auch storeRelease() und loadRelaxed().
T *QAtomicPointer::loadRelaxed() const
Lädt den Wert dieses ` QAtomicPointer ` atomar unter Verwendung einer entspannten Speicherreihenfolge. Der Wert wird in keiner Weise verändert, es besteht jedoch keine Garantie dafür, dass er unverändert bleibt.
Siehe auch „ storeRelaxed()“ und „ loadAcquire()“.
void QAtomicPointer::storeRelaxed(T *newValue)
Speichert den Wert von „ newValue “ atomar in diesem atomaren Typ unter Verwendung einer gelockerten Speicherreihenfolge.
Siehe auch „ storeRelease()“ und „ loadRelaxed()“.
void QAtomicPointer::storeRelease(T *newValue)
Speichert den Wert von „ newValue “ atomar in diesem atomaren Typ unter Verwendung der Speicherreihenfolge „Release“.
Siehe auch ` storeRelaxed()` und ` loadRelaxed()`.
bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue)
Atomares „Test-and-Set“.
Hinweis: Wenn Sie diese Funktion in einer Schleife verwenden, sollten Sie stattdessen die Überladung mit dem zusätzlichen Argument „ T *¤tValue “ in Betracht ziehen, wodurch der zusätzliche Aufruf von `load()` bei einem Fehler vermieden wird.
Ist der aktuelle Wert dieses „ QAtomicPointer “ der „ expectedValue “, weisen die „test-and-set“-Funktionen diesem „ QAtomicPointer “ den „ newValue “ zu und geben „true“ zurück. Sind die Werte nicht identisch, führt diese Funktion keine Aktion aus und gibt „ false “ zurück.
Diese Funktion verwendet die „Acquire- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe, die (in der Programmreihenfolge) auf die atomare Operation folgen, nicht vor der atomaren Operation neu geordnet werden dürfen.
bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue, T *¤tValue)
Atomares „Test-and-Set“.
Wenn der aktuelle Wert dieses „ QAtomicPointer “ dem „ expectedValue “ entspricht, weisen die „Test-and-Set“-Funktionen den „ newValue “ diesem „ QAtomicPointer “ zu und geben „ true “ zurück. Sind die Werte nicht identisch, laden die Funktionen den aktuellen Wert dieses „ QAtomicPointer “ in „ currentValue “ und geben „ false “ zurück.
Diese Funktion verwendet die Semantik „acquire memory ordering “, die sicherstellt, dass Speicherzugriffe, die (in Programmreihenfolge) auf die atomare Operation folgen, nicht vor der atomaren Operation neu geordnet werden dürfen. Wenn der „Test-and-Set“-Vorgang fehlschlägt, wird „ currentValue “ mit der Semantik „acquire memory ordering “ geladen.
bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue)
Atomares „Test-and-Set“.
Hinweis: Wenn Sie diese Funktion in einer Schleife verwenden, sollten Sie stattdessen die Überladung mit dem zusätzlichen Argument „ T *¤tValue “ in Betracht ziehen, wodurch der zusätzliche Aufruf von „load()“ bei einem Fehlschlag vermieden wird.
Ist der aktuelle Wert dieses „ QAtomicPointer “ der „ expectedValue “, weisen die „test-and-set“-Funktionen den „ newValue “ diesem „ QAtomicPointer “ zu und geben „true“ zurück. Sind die Werte nicht identisch, führt diese Funktion keine Aktion aus und gibt „ false “ zurück.
Diese Funktion verwendet die Semantik „ memory ordering “, die sicherstellt, dass Speicherzugriffe vor und nach der atomaren Operation (in Programmreihenfolge) nicht neu geordnet werden dürfen.
bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue, T *¤tValue)
Atomares „Test-and-Set“.
Wenn der aktuelle Wert dieses „ QAtomicPointer “ der „ expectedValue “ entspricht, weisen die „Test-and-Set“-Funktionen dem „ QAtomicPointer “ den Wert „ newValue “ zu und geben „ true “ zurück. Sind die Werte nicht identisch, laden die Funktionen den aktuellen Wert dieses „ QAtomicPointer “ in „ currentValue “ und geben „ false “ zurück.
Diese Funktion verwendet die Semantik „ memory ordering “, die sicherstellt, dass Speicherzugriffe vor und nach der atomaren Operation (in Programmreihenfolge) nicht neu geordnet werden dürfen. Wenn der „Test-and-Set“-Vorgang fehlschlägt, wird die Variable „ currentValue “ mit der Semantik „ memory ordering “ geladen.
bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue)
Atomares „Test-and-Set“.
Hinweis: Wenn Sie diese Funktion in einer Schleife verwenden, sollten Sie stattdessen die Überladung mit dem zusätzlichen Argument „ T *¤tValue “ in Betracht ziehen, wodurch der zusätzliche Aufruf von „load()“ bei einem Fehler vermieden wird.
Ist der aktuelle Wert dieses „ QAtomicPointer “ der „ expectedValue “, weisen die „test-and-set“-Funktionen den „ newValue “ diesem „ QAtomicPointer “ zu und geben „true“ zurück. Sind die Werte nicht identisch, führt diese Funktion keine Aktion aus und gibt „ false “ zurück.
Diese Funktion verwendet eine lockere „ memory ordering “-Semantik, sodass der Compiler und der Prozessor die Speicherzugriffe frei neu anordnen können.
bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue, T *¤tValue)
Atomares „Test-and-Set“.
Wenn der aktuelle Wert dieses „ QAtomicPointer “ mit dem „ expectedValue “ übereinstimmt, weisen die „Test-and-Set“-Funktionen diesem „ QAtomicPointer “ den „ newValue “ zu und geben „ true “ zurück. Sind die Werte nicht identisch, laden die Funktionen den aktuellen Wert dieses „ QAtomicPointer “ in „ currentValue “ und geben „ false “ zurück.
Diese Funktion verwendet die „relaxed“ memory ordering -Semantik, wodurch es dem Compiler und dem Prozessor überlassen bleibt, Speicherzugriffe frei neu zu ordnen. Wenn der „Test-and-Set“-Zugriff fehlschlägt, wird die currentValue mit der „relaxed“ memory ordering -Semantik geladen.
bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue)
Atomares „Test-and-Set“.
Hinweis: Wenn Sie diese Funktion in einer Schleife verwenden, sollten Sie stattdessen die Überladung mit dem zusätzlichen Argument „ T *¤tValue “ in Betracht ziehen, wodurch das zusätzliche „load()“ bei einem Fehlschlag vermieden wird.
Ist der aktuelle Wert dieses „ QAtomicPointer “ der „ expectedValue “, weisen die „test-and-set“-Funktionen den „ newValue “ diesem „ QAtomicPointer “ zu und geben „true“ zurück. Sind die Werte nicht identisch, führt diese Funktion keine Aktion aus und gibt „ false “ zurück.
Diese Funktion verwendet die „Release- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe vor der atomaren Operation (in Programmreihenfolge) nach der atomaren Operation nicht neu geordnet werden dürfen.
bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue, T *¤tValue)
Atomares „Test-and-Set“.
Wenn der aktuelle Wert dieses „ QAtomicPointer “ der Wert „ expectedValue “ ist, weisen die „Test-and-Set“-Funktionen diesem „ QAtomicPointer “ den Wert „ newValue “ zu und geben „ true “ zurück. Sind die Werte nicht identisch, laden die Funktionen den aktuellen Wert dieses „ QAtomicPointer “ in „ currentValue “ und geben „ false “ zurück.
Diese Funktion verwendet die „Release- memory ordering “-Semantik, die sicherstellt, dass Speicherzugriffe vor der atomaren Operation (in Programmreihenfolge) nach der atomaren Operation nicht neu geordnet werden dürfen. Wenn der „Test-and-Set“-Vorgang fehlschlägt, wird „ currentValue “ mit der „Relaxed- memory ordering “-Semantik geladen.
[noexcept] QAtomicPointer<T> &QAtomicPointer::operator=(const QAtomicPointer<T> &other)
Weist „ other “ diesem „ QAtomicPointer “ zu und gibt eine Referenz auf dieses „ QAtomicPointer “ zurück.
Makro-Dokumentation
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE
Dieses Makro ist genau dann definiert, wenn Ihr Prozessor atomare „Fetch-and-Add“-Operationen mit Zeigern unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE
Dieses Makro wird definiert, wenn die Hardware keine atomaren „Fetch-and-Add“-Operationen für Zeiger unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
Dieses Makro wird definiert, wenn nur bestimmte Prozessorgenerationen atomares „Fetch-and-Add“ für Zeiger unterstützen. Verwenden Sie die Funktion „ QAtomicPointer::isFetchAndAddNative()“, um zu prüfen, was Ihr Prozessor unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE
Dieses Makro wird zusammen mit „ Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE “ definiert, um anzugeben, dass der atomare „Fetch-and-Add“-Vorgang bei Zeigern wartungsfrei ist.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
Dieses Makro ist genau dann definiert, wenn Ihr Prozessor atomare Fetch-and-Store-Operationen mit Zeigern unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE
Dieses Makro wird definiert, wenn die Hardware keine atomaren „Fetch-and-Store“-Operationen für Zeiger unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
Dieses Makro wird definiert, wenn nur bestimmte Prozessorgenerationen atomare Fetch-and-Store-Operationen mit Zeigern unterstützen. Verwenden Sie die Funktion ` QAtomicPointer::isFetchAndStoreNative()``, um zu prüfen, was Ihr Prozessor unterstützt.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE
Dieses Makro wird zusammen mit „ Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE “ definiert, um anzugeben, dass der atomare Fetch-and-Store-Vorgang bei Zeigern wartungsfrei ist.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
Dieses Makro ist genau dann definiert, wenn Ihr Prozessor atomares „Test-and-Set“ für Zeiger unterstützt.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE
Dieses Makro wird definiert, wenn die Hardware kein atomares „Test-and-Set“ für Zeiger unterstützt.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE
Dieses Makro wird definiert, wenn nur bestimmte Prozessorgenerationen atomares „Test-and-Set“ für Zeiger unterstützen. Verwenden Sie die Funktion „ QAtomicPointer::isTestAndSetNative()“, um zu prüfen, was Ihr Prozessor unterstützt.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE
Dieses Makro wird zusammen mit „ Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE “ definiert, um anzugeben, dass der atomare „Test-and-Set“-Vorgang bei Zeigern wartungsfrei ist.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.