Namensräume
Varianten
Aktionen

Bibliothek für nebenläufige Programmierung

Von cppreference.com
< c

C enthält integrierte Unterstützung für Threads, atomare Operationen, gegenseitigen Ausschluss, Bedingungsvariablen und Thread-spezifischen Speicher.

Diese Funktionen werden optional bereitgestellt

  • wenn die Makrokonstante __STDC_NO_THREADS__ vom Compiler definiert ist, sind die Headerdatei <threads.h> und alle darin enthaltenen Namen nicht verfügbar;
  • wenn die Makrokonstante __STDC_NO_ATOMICS__ vom Compiler definiert ist, sind die Headerdatei <stdatomic.h> und alle darin enthaltenen Namen nicht verfügbar.

Siehe auch _Atomic Typ-Spezifizierer und Qualifier.

Inhalt

[bearbeiten] Threads

Definiert im Header <threads.h>
thrd_t implementierungsabhängiger vollständiger Objekttyp zur Identifizierung eines Threads [bearbeiten]
erzeugt einen Thread
(Funktion) [bearbeiten]
prüft, ob zwei Bezeichner auf denselben Thread verweisen
(Funktion) [bearbeiten]
erhält die Kennung des aktuellen Threads
(Funktion) [bearbeiten]
setzt die Ausführung des aufrufenden Threads für die angegebene Zeitspanne aus
(Funktion) [bearbeiten]
gibt den aktuellen Zeitschlitz frei
(Funktion) [bearbeiten]
beendet den aufrufenden Thread
(Funktion) [bearbeiten]
trennt einen Thread ab
(Funktion) [bearbeiten]
blockiert, bis ein Thread beendet wird
(Funktion) [bearbeiten]
zeigt einen Thread-Fehlerstatus an
(Konstante) [bearbeiten]
thrd_start_t
(C11)
ein Typedef des Funktionszeigertyps int(*)(void*), verwendet von thrd_create
(typedef) [bearbeiten]

[bearbeiten] Atomare Operationen

Definiert im Header <stdatomic.h>
Operationen auf atomaren Typen
zeigt an, dass der gegebene atomare Typ sperrfrei ist
(Makro-Konstante) [bearbeiten]
zeigt an, ob das atomare Objekt sperrfrei ist
(Funktion) [bearbeiten]
speichert einen Wert in einem atomaren Objekt
(Funktion) [bearbeiten]
liest einen Wert aus einem atomaren Objekt
(Funktion) [bearbeiten]
tauscht einen Wert mit dem Wert eines atomaren Objekts aus
(Funktion) [bearbeiten]
tauscht einen Wert mit einem atomaren Objekt aus, wenn der alte Wert der erwartete ist, andernfalls liest er den alten Wert
(Funktion) [bearbeiten]
atomare Addition
(Funktion) [bearbeiten]
atomare Subtraktion
(Funktion) [bearbeiten]
atomares bitweises ODER
(Funktion) [bearbeiten]
atomares bitweises exklusives ODER
(Funktion) [bearbeiten]
atomares bitweises UND
(Funktion) [bearbeiten]
Flag-Typ und Operationen
sperrfreies atomares boolesches Flag
(Struktur)[bearbeiten]
setzt ein atomic_flag auf true und gibt den alten Wert zurück
(Funktion) [bearbeiten]
setzt ein atomic_flag auf false
(Funktion) [bearbeiten]
Initialisierung
initialisiert ein vorhandenes atomares Objekt
(Funktion) [bearbeiten]
(C11)(veraltet in C17)(entfernt in C23)
initialisiert ein neues atomares Objekt
(Makro-Funktion) [bearbeiten]
initialisiert ein neues atomic_flag
(Makro-Konstante) [bearbeiten]
Speichersynchronisationsordnung
definiert Speicherreihenfolgebeschränkungen
(Enum) [bearbeiten]
bricht eine Abhängigkeitskette für memory_order_consume
(Makro-Funktion) [bearbeiten]
allgemeines speicherordnungsabhängiges Fence-Synchronisationsprimitiv
(Funktion) [bearbeiten]
Fence zwischen einem Thread und einem Signal-Handler, der im selben Thread ausgeführt wird
(Funktion) [bearbeiten]
Komfortable Typ-Aliase
Typedef-Name Vollständiger Typ-Name
atomic_bool (C11) _Atomic _Bool(bis C23)_Atomic bool(seit C23)
atomic_char (C11) _Atomic char
atomic_schar (C11) _Atomic signed char
atomic_uchar (C11) _Atomic unsigned char
atomic_short (C11) _Atomic short
atomic_ushort (C11) _Atomic unsigned short
atomic_int (C11) _Atomic int
atomic_uint (C11) _Atomic unsigned int
atomic_long (C11) _Atomic long
atomic_ulong (C11) _Atomic unsigned long
atomic_llong (C11) _Atomic long long
atomic_ullong (C11) _Atomic unsigned long long
atomic_char8_t (C23) _Atomic char8_t
atomic_char16_t (C11) _Atomic char16_t
atomic_char32_t (C11) _Atomic char32_t
atomic_wchar_t (C11) _Atomic wchar_t
atomic_int_least8_t (C11) _Atomic int_least8_t
atomic_uint_least8_t (C11) _Atomic uint_least8_t
atomic_int_least16_t (C11) _Atomic int_least16_t
atomic_uint_least16_t (C11) _Atomic uint_least16_t
atomic_int_least32_t (C11) _Atomic int_least32_t
atomic_uint_least32_t (C11) _Atomic uint_least32_t
atomic_int_least64_t (C11) _Atomic int_least64_t
atomic_uint_least64_t (C11) _Atomic uint_least64_t
atomic_int_fast8_t (C11) _Atomic int_fast8_t
atomic_uint_fast8_t (C11) _Atomic uint_fast8_t
atomic_int_fast16_t (C11) _Atomic int_fast16_t
atomic_uint_fast16_t (C11) _Atomic uint_fast16_t
atomic_int_fast32_t (C11) _Atomic int_fast32_t
atomic_uint_fast32_t (C11) _Atomic uint_fast32_t
atomic_int_fast64_t (C11) _Atomic int_fast64_t
atomic_uint_fast64_t (C11) _Atomic uint_fast64_t
atomic_intptr_t (C11) _Atomic intptr_t
atomic_uintptr_t (C11) _Atomic uintptr_t
atomic_size_t (C11) _Atomic size_t
atomic_ptrdiff_t (C11) _Atomic ptrdiff_t
atomic_intmax_t (C11) _Atomic intmax_t
atomic_uintmax_t (C11) _Atomic uintmax_t

[bearbeiten] Gegenseitiger Ausschluss

Definiert im Header <threads.h>
mtx_t Mutex-Kennung [bearbeiten]
erzeugt einen Mutex
(Funktion) [bearbeiten]
blockiert, bis ein Mutex gesperrt ist
(Funktion) [bearbeiten]
blockiert, bis ein Mutex gesperrt ist, oder läuft ab
(Funktion) [bearbeiten]
sperrt einen Mutex oder kehrt zurück, ohne zu blockieren, wenn er bereits gesperrt ist
(Funktion) [bearbeiten]
entsperrt einen Mutex
(Funktion) [bearbeiten]
zerstört einen Mutex
(Funktion) [bearbeiten]
definiert den Typ eines Mutex
(Enum) [bearbeiten]
Einmaliger Aufruf
ruft eine Funktion genau einmal auf
(Funktion) [bearbeiten]

[bearbeiten] Bedingungsvariablen

Definiert im Header <threads.h>
cnd_t Kennung der Bedingungsvariable
erzeugt eine Bedingungsvariable
(Funktion) [bearbeiten]
entblockiert einen Thread, der auf eine Bedingungsvariable wartet
(Funktion) [bearbeiten]
entblockiert alle Threads, die auf eine Bedingungsvariable warten
(Funktion) [bearbeiten]
blockiert auf einer Bedingungsvariable
(Funktion) [bearbeiten]
blockiert auf einer Bedingungsvariable mit Timeout
(Funktion) [bearbeiten]
zerstört eine Bedingungsvariable
(Funktion) [bearbeiten]

[bearbeiten] Thread-lokaler Speicher

Definiert im Header <threads.h>
(C11)(entfernt in C23)
Komfort-Makro für den Storage-Class-Spezifizierer _Thread_local
(Keyword-Makro) [bearbeiten]
tss_t Thread-spezifischer Speicherzeiger [bearbeiten]
maximale Anzahl von Aufrufen der Destruktoren
(Makro-Konstante) [bearbeiten]
tss_dtor_t
(C11)
Funktionszeigertyp void(*)(void*), verwendet für TSS-Destruktoren
(typedef) [bearbeiten]
erzeugt einen thread-spezifischen Speicherzeiger mit einem gegebenen Destruktor
(Funktion) [bearbeiten]
liest aus dem thread-spezifischen Speicher
(Funktion) [bearbeiten]
schreibt in den thread-spezifischen Speicher
(Funktion) [bearbeiten]
gibt die Ressourcen frei, die von einem gegebenen thread-spezifischen Zeiger gehalten werden
(Funktion) [bearbeiten]

[bearbeiten] Reservierte Bezeichner

In zukünftigen Revisionen des C-Standards

  • Funktionsnamen, Typnamen und Aufzählungskonstanten, die entweder mit cnd_, mtx_, thrd_ oder tss_ und einem Kleinbuchstaben beginnen, können den Deklarationen im Header <threads.h> hinzugefügt werden;
  • Makros, die mit ATOMIC_ und einem Großbuchstaben beginnen, können zu den in der Headerdatei <stdatomic.h> definierten Makros hinzugefügt werden;
  • Typedef-Namen, die entweder mit atomic_ oder memory_ und einem Kleinbuchstaben beginnen, können den Deklarationen in der Headerdatei <stdatomic.h> hinzugefügt werden;
  • Aufzählungskonstanten, die mit memory_order_ und einem Kleinbuchstaben beginnen, können der Definition des Typs memory_order in der Headerdatei <stdatomic.h> hinzugefügt werden;
  • Funktionsnamen, die mit atomic_ und einem Kleinbuchstaben beginnen, können den Deklarationen in der Headerdatei <stdatomic.h> hinzugefügt werden.

Bezeichner, die für Funktionsnamen reserviert sind, sind immer potenziell(seit C23) für die Verwendung als Bezeichner mit externer Verknüpfung reserviert, während andere hier aufgeführte Bezeichner potenziell(seit C23) reserviert sind, wenn <stdatomic.h> eingebunden wird.

Das Deklarieren, Definieren oder #undefen eines solchen Bezeichners führt zu undefiniertem Verhalten wenn er vom Standard oder der Implementierung bereitgestellt wird(seit C23). Portierbare Programme sollten diese Bezeichner nicht verwenden.

[bearbeiten] Referenzen

  • C23-Standard (ISO/IEC 9899:2024)
  • 7.17 Atomics <stdatomic.h> (S. TBD)
  • 7.26 Threads <threads.h> (S. TBD)
  • 7.31.8 Atomics <stdatomic.h> (S. TBD)
  • 7.31.15 Threads <threads.h> (S. TBD)
  • C17-Standard (ISO/IEC 9899:2018)
  • 7.17 Atomics <stdatomic.h> (S. 200-209)
  • 7.26 Threads <threads.h> (S. 274-283)
  • 7.31.8 Atomics <stdatomic.h> (S. 332)
  • 7.31.15 Threads <threads.h> (S. 333)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.17 Atomics <stdatomic.h> (S. 273-286)
  • 7.26 Threads <threads.h> (S. 376-387)
  • 7.31.8 Atomics <stdatomic.h> (S. 455-456)
  • 7.31.15 Threads <threads.h> (S. 456)

[bearbeiten] Siehe auch

C++ Dokumentation für Unterstützung für Nebenläufigkeit-Bibliothek

[bearbeiten] Externe Links

GNU GCC Libc Manual: ISO C Mutexe