Namespaces
Variants

atomic_is_lock_free

From cppreference.net
Défini dans l'en-tête <stdatomic.h>
_Bool atomic_is_lock_free ( const volatile A * obj ) ;
(depuis C11)

Détermine si les opérations atomiques sur tous les objets du type A (le type de l'objet pointé par obj ) sont sans verrou. Dans toute exécution de programme donnée, le résultat de l'appel à atomic_is_lock_free est le même pour tous les pointeurs du même type.

Ceci est une fonction générique définie pour tous les types d'objets atomiques A . L'argument est un pointeur vers un type atomique volatile pour accepter les adresses des objets atomiques non volatiles et volatiles (par exemple, E/S mappées en mémoire), et la sémantique volatile est préservée lors de l'application de cette opération aux objets atomiques volatiles.

Il n'est pas spécifié si le nom d'une fonction générique est une macro ou un identifiant déclaré avec liaison externe. Si une définition de macro est supprimée pour accéder à une fonction réelle (par exemple mise entre parenthèses comme ( atomic_is_lock_free ) ( ... ) ), ou si un programme définit un identifiant externe portant le nom d'une fonction générique, le comportement est indéfini.

Table des matières

Paramètres

obj - pointeur vers l'objet atomique à inspecter

Valeur de retour

true si les opérations sur tous les objets du type A sont sans verrou, false sinon.

Exemple

#include <stdio.h>
#include <stdatomic.h>
_Atomic struct A { int a[100]; } a;
_Atomic struct B { int x, y; } b;
int main(void)
{
    printf("_Atomic struct A is lock free? %s\n", 
            atomic_is_lock_free(&a) ? "true" : "false");
    printf("_Atomic struct B is lock free? %s\n", 
            atomic_is_lock_free(&b) ? "true" : "false");
}

Sortie possible :

_Atomic struct A is lock free? false
_Atomic struct B is lock free? true

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C publiées antérieurement.

DR Appliqué à Comportement publié Comportement correct
DR 465 C11 cette fonction était par objet cette fonction est par type

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.17.5.1 La fonction générique atomic_is_lock_free (p: 205)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.17.5.1 La fonction générique atomic_is_lock_free (p: 280)

Voir aussi

indique que le type atomique donné est sans verrouillage
(constante de macro)
Documentation C++ pour atomic_is_lock_free