Namespaces
Variants

atomic_is_lock_free

From cppreference.net
Definiert im Header <stdatomic.h>
_Bool atomic_is_lock_free ( const volatile A * obj ) ;
(seit C11)

Bestimmt, ob die atomaren Operationen auf allen Objekten des Typs A (dem Typ des Objekts, auf das obj zeigt) sperrfrei sind. In einem gegebenen Programmablauf ist das Ergebnis des Aufrufs von atomic_is_lock_free für alle Zeiger desselben Typs gleich.

Dies ist eine generische Funktion , die für alle atomaren Objekttypen A definiert ist. Das Argument ist ein Zeiger auf einen flüchtigen atomaren Typ, um Adressen sowohl von nicht-flüchtigen als auch flüchtigen (z.B. speichergemappten E/A) atomaren Objekten zu akzeptieren, und die flüchtige Semantik wird beibehalten, wenn diese Operation auf flüchtige atomare Objekte angewendet wird.

Es ist nicht spezifiziert, ob der Name einer generischen Funktion ein Makro oder ein mit externer Bindung deklarierter Bezeichner ist. Wenn eine Makrodefinition unterdrückt wird, um auf eine tatsächliche Funktion zuzugreifen (z. B. in Klammern gesetzt wie ( atomic_is_lock_free ) ( ... ) ), oder ein Programm einen externen Bezeichner mit dem Namen einer generischen Funktion definiert, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

obj - Zeiger auf das zu untersuchende atomare Objekt

Rückgabewert

true wenn die Operationen auf allen Objekten des Typs A lock-free sind, false andernfalls.

Beispiel

#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");
}

Mögliche Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
DR 465 C11 diese Funktion war pro Objekt diese Funktion ist pro Typ

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 7.17.5.1 Die generische Funktion atomic_is_lock_free (S: 205)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.17.5.1 Die atomic_is_lock_free generische Funktion (S: 280)

Siehe auch

gibt an, dass der gegebene atomare Typ sperrfrei ist
(Makrokonstante)
C++-Dokumentation für atomic_is_lock_free