QAtomicPointer Class
template <typename T> class QAtomicPointerLa classe `QAtomicPointer` est une classe modèle qui permet d'effectuer des opérations atomiques sur des pointeurs, indépendamment de la plate-forme. En savoir plus...
| En-tête : | #include <QAtomicPointer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
- Liste de tous les membres, y compris les membres hérités
- QAtomicPointer fait partie des classes de multithreading.
Fonctions publiques
| 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) |
Membres publics statiques
| bool | isFetchAndAddNative() |
| bool | isFetchAndAddWaitFree() |
| bool | isFetchAndStoreNative() |
| bool | isFetchAndStoreWaitFree() |
| bool | isTestAndSetNative() |
| bool | isTestAndSetWaitFree() |
Macros
Description détaillée
Pour les opérations atomiques sur des entiers, voir la classe ` QAtomicInteger `.
Une opération atomique est une opération complexe qui s'exécute sans interruption. La classe QAtomicPointer fournit des opérations atomiques de type « test-and-set », « fetch-and-store » et « fetch-and-add » pour les pointeurs. Le paramètre de modèle T spécifie le type vers lequel pointe le pointeur.
L'API atomique
Ordre de la mémoire
QAtomicPointer fournit plusieurs implémentations des fonctions atomiques « test-and-set », « fetch-and-store » et « fetch-and-add ». Chaque implémentation définit une sémantique d’ordonnancement mémoire qui décrit la manière dont les accès mémoire entourant l’instruction atomique sont exécutés par le processeur. Étant donné que de nombreuses architectures modernes autorisent l’exécution hors ordre et l’ordonnancement mémoire, il est nécessaire d’utiliser la sémantique appropriée pour garantir le bon fonctionnement de votre application sur tous les processeurs.
- Relaxed : l’ordre de la mémoire n’est pas spécifié, ce qui laisse au compilateur et au processeur la liberté de réorganiser les accès à la mémoire.
- Acquire : les accès mémoire suivant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés avant l’opération atomique.
- Release : les accès mémoire précédant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés après l’opération atomique.
- « Ordered » : combine les sémantiques « Acquire » et « Release ».
Test-and-set
Si la valeur actuelle du QAtomicPointer correspond à la valeur attendue, les fonctions « test-and-set » attribuent une nouvelle valeur au QAtomicPointer et renvoient true. Si les valeurs ne correspondent pas, ces fonctions ne font rien et renvoient false. Cette opération équivaut au code suivant :
if (currentValue == expectedValue) {
currentValue = newValue;
return true;
}
return false;Il existe 4 fonctions « test-and-set » : ` testAndSetRelaxed()`, ` testAndSetAcquire()`, ` testAndSetRelease()` et ` testAndSetOrdered()`. Voir ci-dessus pour une explication des différentes sémantiques d’ordonnancement de la mémoire.
Lecture et écriture
Les fonctions atomiques de lecture et d’écriture lisent la valeur actuelle du QAtomicPointer, puis lui attribuent une nouvelle valeur, en renvoyant la valeur d’origine. Cette opération équivaut au code suivant :
T *originalValue = currentValue;
currentValue = newValue;
return originalValue;Il existe 4 fonctions de lecture-écriture : fetchAndStoreRelaxed(), fetchAndStoreAcquire(), fetchAndStoreRelease() et fetchAndStoreOrdered(). Voir ci-dessus pour une explication des différentes sémantiques d’ordonnancement de la mémoire.
Lecture et ajout
Les fonctions atomiques de lecture et d’ajout lisent la valeur actuelle du `QAtomicPointer`, puis ajoutent la valeur fournie à la valeur actuelle, renvoyant ainsi la valeur d’origine. Cette opération équivaut au code suivant :
T *originalValue = currentValue;
currentValue += valueToAdd;
return originalValue;Il existe 4 fonctions « fetch-and-add » : fetchAndAddRelaxed(), fetchAndAddAcquire(), fetchAndAddRelease() et fetchAndAddOrdered(). Voir ci-dessus pour une explication des différentes sémantiques d’ordonnancement de la mémoire.
Tests de fonctionnalités pour l’API atomique
Fournir une API atomique indépendante de la plate-forme et fonctionnant sur tous les processeurs représente un véritable défi. L’API fournie par QAtomicPointer est garantie de fonctionner de manière atomique sur tous les processeurs. Cependant, comme tous les processeurs ne prennent pas en charge l’ensemble des opérations fournies par QAtomicPointer, il est nécessaire d’exposer des informations sur le processeur.
Vous pouvez vérifier au moment de la compilation quelles fonctionnalités sont prises en charge par votre matériel à l’aide de diverses macros. Celles-ci vous indiqueront si votre matériel prend en charge une opération particulière en permanence, parfois ou pas du tout. Les macros se présentent sous la formeQ_ATOMIC_POINTER_OPERATION_IS_HOW_NATIVE. OPERATION peut prendre l’une des valeurs suivantes : TEST_AND_SET, FETCH_AND_STORE ou FETCH_AND_ADD, et HOW peut prendre l’une des valeurs suivantes : ALWAYS, SOMETIMES ou NOT. Il y aura toujours exactement une macro définie par opération. Par exemple, si Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE est définie, ni Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE ni Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE ne seront définies.
Une opération qui s’exécute en temps constant est dite « sans attente » (wait-free). Ces opérations ne sont pas implémentées à l’aide de verrous ou de boucles d’aucune sorte. Pour les opérations atomiques qui sont toujours prises en charge et qui sont « sans attente », Qt définit le drapeauQ_ATOMIC_POINTER_OPERATION_IS_WAIT_FREE en plus du drapeauQ_ATOMIC_POINTER_OPERATION_IS_ALWAYS_NATIVE.
Dans les cas où une opération atomique n’est prise en charge que par les nouvelles générations de processeurs, QAtomicPointer offre également un moyen de vérifier à l’exécution ce que votre matériel prend en charge grâce aux fonctions ` isTestAndSetNative()`, ` isFetchAndStoreNative()` et ` isFetchAndAddNative()`. Les implémentations « sans attente » peuvent être détectées à l’aide des fonctions ` isTestAndSetWaitFree()`, ` isFetchAndStoreWaitFree()` et ` isFetchAndAddWaitFree()`.
Vous trouverez ci-dessous la liste complète de toutes les macros de fonctionnalités pour 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
Voir également QAtomicInteger et qYieldCpu().
Documentation des fonctions membres
[constexpr noexcept] QAtomicPointer::QAtomicPointer(T *value = nullptr)
Crée un QAtomicPointer à partir de l'value on fournie.
[noexcept] QAtomicPointer::QAtomicPointer(const QAtomicPointer<T> &other)
Crée une copie de other.
T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd)
Opération atomique « fetch-and-add ».
Lit la valeur actuelle de cette QAtomicPointer, puis ajoute valueToAdd à la valeur actuelle, en renvoyant la valeur d’origine.
Cette fonction utilise la sémantique « acquire- memory ordering », qui garantit que les accès à la mémoire suivant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés avant ladite opération.
T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd)
Opération atomique « fetch-and-add ».
Lit la valeur actuelle de cette QAtomicPointer, puis ajoute valueToAdd à cette valeur, et renvoie la valeur d’origine.
Cette fonction utilise la sémantique des « ordered memory ordering », qui garantit que les accès à la mémoire avant et après l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés.
T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd)
Opération atomique « fetch-and-add ».
Lit la valeur actuelle de cette QAtomicPointer, puis ajoute valueToAdd à cette valeur, et renvoie la valeur d’origine.
Cette fonction utilise une sémantique d'memory ordering « relaxed », laissant au compilateur et au processeur la liberté de réorganiser les accès à la mémoire.
T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd)
Opération atomique « fetch-and-add ».
Lit la valeur actuelle de cette QAtomicPointer, puis ajoute valueToAdd à cette valeur, et renvoie la valeur d’origine.
Cette fonction utilise la sémantique « release- memory ordering », qui garantit que les accès à la mémoire antérieurs à l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés après l’opération atomique.
T *QAtomicPointer::fetchAndStoreAcquire(T *newValue)
Opération atomique de lecture-écriture.
Lit la valeur actuelle de cette QAtomicPointer, puis lui attribue l’ newValue, en renvoyant la valeur d’origine.
Cette fonction utilise la sémantique « acquire- memory ordering », qui garantit que les accès à la mémoire suivant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés avant ladite opération.
T *QAtomicPointer::fetchAndStoreOrdered(T *newValue)
Opération atomique de lecture-écriture.
Lit la valeur actuelle de cette QAtomicPointer, puis lui attribue l’ newValue, en renvoyant la valeur d’origine.
Cette fonction utilise la sémantique des « memory ordering s ordonnés », qui garantit que les accès à la mémoire avant et après l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés.
T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue)
Opération atomique de lecture-écriture.
Lit la valeur actuelle de cette QAtomicPointer, puis lui attribue l'newValue, en renvoyant la valeur d'origine.
Cette fonction utilise la sémantique « relaxed » de l’ memory ordering, laissant au compilateur et au processeur la liberté de réorganiser les accès mémoire.
T *QAtomicPointer::fetchAndStoreRelease(T *newValue)
Opération atomique de lecture-écriture.
Lit la valeur actuelle de cette QAtomicPointer, puis lui attribue l'newValue, en renvoyant la valeur d'origine.
Cette fonction utilise la sémantique « release- memory ordering », qui garantit que les accès à la mémoire antérieurs à l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés après l’opération atomique.
[static constexpr] bool QAtomicPointer::isFetchAndAddNative()
Renvoie « true » si la fonction « fetch-and-add » est implémentée à l'aide d'instructions atomiques du processeur ; sinon, elle renvoie « false ».
[static constexpr] bool QAtomicPointer::isFetchAndAddWaitFree()
Renvoie « true » si l'opération atomique « fetch-and-add » est sans attente, « false » dans le cas contraire.
[static constexpr] bool QAtomicPointer::isFetchAndStoreNative()
Renvoie « true » si la fonction « fetch-and-store » est implémentée à l'aide d'instructions atomiques du processeur ; « false » dans le cas contraire.
[static constexpr] bool QAtomicPointer::isFetchAndStoreWaitFree()
Renvoie ` true ` si l'opération atomique « fetch-and-store » est sans attente, et `false` dans le cas contraire.
[static constexpr] bool QAtomicPointer::isTestAndSetNative()
Renvoie « true » si la fonction « test-and-set » est implémentée à l'aide d'instructions atomiques du processeur ; sinon, elle renvoie « false ».
[static constexpr] bool QAtomicPointer::isTestAndSetWaitFree()
Renvoie « true » si l'opération « test-and-set » atomique est sans attente, et « false » dans le cas contraire.
T *QAtomicPointer::loadAcquire() const
Charge de manière atomique la valeur de cet QAtomicPointer en utilisant l'ordre de mémoire « Acquire ». La valeur n'est en aucun cas modifiée, mais notez qu'il n'y a aucune garantie qu'elle reste inchangée.
Voir également storeRelease() et loadRelaxed().
T *QAtomicPointer::loadRelaxed() const
Charge de manière atomique la valeur de cet objet ` QAtomicPointer ` en utilisant un ordre de mémoire assoupli. La valeur n'est en aucun cas modifiée, mais notez qu'il n'y a aucune garantie qu'elle reste inchangée.
Voir également storeRelaxed() et loadAcquire().
void QAtomicPointer::storeRelaxed(T *newValue)
Enregistre de manière atomique la valeur de ` newValue ` dans ce type atomique, en utilisant un ordre de mémoire assoupli.
Voir également ` storeRelease()` et ` loadRelaxed()`.
void QAtomicPointer::storeRelease(T *newValue)
Enregistre de manière atomique la valeur newValue dans ce type atomique, en utilisant l'ordre de mémoire « Release ».
Voir également ` storeRelaxed()` et ` loadRelaxed()`.
bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue)
Test-and-set atomique.
Remarque : si vous utilisez cette fonction dans une boucle, envisagez plutôt d’utiliser la surcharge avec l’argument supplémentaire ` T *¤tValue `, ce qui évite l’appel supplémentaire à `load()` en cas d’échec.
Si la valeur actuelle de cette QAtomicPointer correspond à l’ expectedValue, les fonctions « test-and-set » attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, cette fonction ne fait rien et renvoie false.
Cette fonction utilise la sémantique « acquire- memory ordering », qui garantit que les accès à la mémoire suivant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés avant l’opération atomique.
bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue, T *¤tValue)
Test-et-initialisation atomique.
Si la valeur actuelle de cette QAtomicPointer est l’ expectedValue, les fonctions « test-and-set » attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, les fonctions chargent la valeur actuelle de cette QAtomicPointer dans currentValue et renvoient false.
Cette fonction utilise la sémantique « acquire » memory ordering, qui garantit que les accès à la mémoire suivant l’opération atomique (dans l’ordre du programme) ne peuvent pas être réordonnés avant l’opération atomique. Si le test-and-set échoue, la variable currentValue est chargée avec la sémantique « acquire » memory ordering.
bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue)
Test-et-définition atomique.
Remarque : si vous utilisez cette fonction dans une boucle, envisagez plutôt d’utiliser la surcharge avec l’argument supplémentaire ` T *¤tValue `, ce qui évite l’appel supplémentaire à `load()` en cas d’échec.
Si la valeur actuelle de cette QAtomicPointer correspond à l’ expectedValue, les fonctions de test et de mise à jour attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, cette fonction ne fait rien et renvoie false.
Cette fonction utilise la sémantique « ordonnée » ( memory ordering ), qui garantit que les accès à la mémoire avant et après l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés.
bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue, T *¤tValue)
Test-et-initialisation atomique.
Si la valeur actuelle de cette QAtomicPointer est celle de l’ expectedValue, les fonctions « test-and-set » attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, les fonctions chargent la valeur actuelle de cette QAtomicPointer dans currentValue et renvoient false.
Cette fonction utilise une sémantique « ordered memory ordering », qui garantit que les accès à la mémoire avant et après l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés. Si l’opération « test-and-set » échoue, la valeur de currentValue est chargée selon la sémantique « acquire memory ordering ».
bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue)
Test et mise à jour atomiques.
Remarque : si vous utilisez cette fonction dans une boucle, envisagez plutôt d’utiliser la surcharge avec l’argument supplémentaire ` T *¤tValue `, ce qui évite l’appel supplémentaire à `load()` en cas d’échec.
Si la valeur actuelle de cette ` QAtomicPointer ` est l'expectedValue, les fonctions « test-and-set » attribuent l'newValue à cette ` QAtomicPointer ` et renvoient `true`. Si les valeurs ne sont pas identiques, cette fonction ne fait rien et renvoie ` false`.
Cette fonction utilise une sémantique « relaxed » memory ordering, laissant au compilateur et au processeur la liberté de réorganiser les accès en mémoire.
bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue, T *¤tValue)
Test-et-mise à jour atomique.
Si la valeur actuelle de cette QAtomicPointer correspond à expectedValue, les fonctions « test-and-set » attribuent la valeur newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, les fonctions chargent la valeur actuelle de cette QAtomicPointer dans currentValue et renvoient false.
Cette fonction utilise une sémantique « relaxed » memory ordering, laissant au compilateur et au processeur la liberté de réorganiser les accès à la mémoire. Si le test-and-set échoue, l’ currentValue est chargé selon une sémantique « relaxed » memory ordering.
bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue)
Test-and-set atomique.
Remarque : si vous utilisez cette fonction dans une boucle, envisagez plutôt d’utiliser la surcharge avec l’argument supplémentaire ` T *¤tValue `, ce qui évite l’appel supplémentaire à `load()` en cas d’échec.
Si la valeur actuelle de cette QAtomicPointer correspond à l’ expectedValue, les fonctions « test-and-set » attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, cette fonction ne fait rien et renvoie false.
Cette fonction utilise la sémantique « release- memory ordering », qui garantit que les accès à la mémoire antérieurs à l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés après l’opération atomique.
bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue, T *¤tValue)
Test-et-initialisation atomique.
Si la valeur actuelle de cette QAtomicPointer est celle de l’ expectedValue, les fonctions « test-and-set » attribuent l’ newValue à cette QAtomicPointer et renvoient true. Si les valeurs ne sont pas identiques, les fonctions chargent la valeur actuelle de cette QAtomicPointer dans currentValue et renvoient false.
Cette fonction utilise la sémantique « release - memory ordering », qui garantit que les accès à la mémoire antérieurs à l’opération atomique (dans l’ordre du programme) ne peuvent pas être réorganisés après l’opération atomique. Si l’opération « test-and-set » échoue, la variable currentValue est chargée selon la sémantique « relaxed- memory ordering ».
[noexcept] QAtomicPointer<T> &QAtomicPointer::operator=(const QAtomicPointer<T> &other)
Attribue l'other à cet QAtomicPointer et renvoie une référence à cet QAtomicPointer.
Documentation sur les macros
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE
Cette macro est définie si et seulement si votre processeur prend en charge les opérations « fetch-and-add » atomiques sur les pointeurs.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_NOT_NATIVE
Cette macro est définie lorsque le matériel ne prend pas en charge les opérations « fetch-and-add » atomiques sur les pointeurs.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE
Cette macro est définie lorsque seules certaines générations de processeurs prennent en charge l'opération atomique « fetch-and-add » sur les pointeurs. Utilisez la fonction ` QAtomicPointer::isFetchAndAddNative()` pour vérifier les fonctionnalités prises en charge par votre processeur.
Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_WAIT_FREE
Cette macro est définie conjointement avec Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE afin d'indiquer que l'opération atomique « fetch-and-add » sur les pointeurs est sans attente.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
Cette macro est définie si et seulement si votre processeur prend en charge les opérations « fetch-and-store » atomiques sur les pointeurs.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_NOT_NATIVE
Cette macro est définie lorsque le matériel ne prend pas en charge les opérations atomiques de lecture-écriture sur les pointeurs.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE
Cette macro est définie lorsque seules certaines générations de processeurs prennent en charge les opérations atomiques de lecture et d'écriture sur les pointeurs. Utilisez la fonction ` QAtomicPointer::isFetchAndStoreNative()` pour vérifier les fonctionnalités prises en charge par votre processeur.
Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_WAIT_FREE
Cette macro est définie conjointement avec Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE afin d'indiquer que l'opération atomique de lecture-écriture sur les pointeurs est sans attente.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
Cette macro est définie si et seulement si votre processeur prend en charge l'opération atomique « test-and-set » sur les pointeurs.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_NOT_NATIVE
Cette macro est définie lorsque le matériel ne prend pas en charge l'opération atomique « test-and-set » sur les pointeurs.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE
Cette macro est définie lorsque seules certaines générations de processeurs prennent en charge l'opération atomique « test-and-set » sur les pointeurs. Utilisez la fonction ` QAtomicPointer::isTestAndSetNative()` pour vérifier les fonctionnalités prises en charge par votre processeur.
Q_ATOMIC_POINTER_TEST_AND_SET_IS_WAIT_FREE
Cette macro est définie conjointement avec Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE afin d'indiquer que l'opération atomique « test-and-set » sur les pointeurs est sans attente.
© 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.