Namensräume
Varianten
Aktionen

atomic_is_lock_free

Von cppreference.com
< c‎ | atomar
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 von obj gezeigt wird) sperrfrei sind. In jeder gegebenen Programmausführung 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 volatilen atomaren Typ, um Adressen von sowohl nicht-volatilen als auch volatilen (z.B. speicherprogrammierter E/A) atomaren Objekten zu akzeptieren, und die volatile Semantik bleibt erhalten, wenn diese Operation auf volatile atomare Objekte angewendet wird.

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

Inhalt

[bearbeiten] Parameter

obj - Zeiger auf das zu prüfende atomare Objekt

[bearbeiten] Rückgabewert

true, wenn die Operationen auf allen Objekten des Typs A sperrfrei sind, andernfalls false.

[bearbeiten] 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

[bearbeiten] Fehlerberichte

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

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

[bearbeiten] 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 generische Funktion atomic_is_lock_free (S. 280)

[bearbeiten] Siehe auch

zeigt an, dass der gegebene atomare Typ sperrfrei ist
(Makro-Konstante) [bearbeiten]
C++ Dokumentation für atomic_is_lock_free