Bibliothek für nebenläufige Programmierung
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 |
| (C11) |
erzeugt einen Thread (Funktion) |
| (C11) |
prüft, ob zwei Bezeichner auf denselben Thread verweisen (Funktion) |
| (C11) |
erhält die Kennung des aktuellen Threads (Funktion) |
| (C11) |
setzt die Ausführung des aufrufenden Threads für die angegebene Zeitspanne aus (Funktion) |
| (C11) |
gibt den aktuellen Zeitschlitz frei (Funktion) |
| (C11) |
beendet den aufrufenden Thread (Funktion) |
| (C11) |
trennt einen Thread ab (Funktion) |
| (C11) |
blockiert, bis ein Thread beendet wird (Funktion) |
| zeigt einen Thread-Fehlerstatus an (Konstante) | |
| thrd_start_t (C11) |
ein Typedef des Funktionszeigertyps int(*)(void*), verwendet von thrd_create (typedef) |
[bearbeiten] Atomare Operationen
| Definiert im Header
<stdatomic.h> | |
Operationen auf atomaren Typen | |
| zeigt an, dass der gegebene atomare Typ sperrfrei ist (Makro-Konstante) | |
| (C11) |
zeigt an, ob das atomare Objekt sperrfrei ist (Funktion) |
| speichert einen Wert in einem atomaren Objekt (Funktion) | |
| liest einen Wert aus einem atomaren Objekt (Funktion) | |
| tauscht einen Wert mit dem Wert eines atomaren Objekts aus (Funktion) | |
| tauscht einen Wert mit einem atomaren Objekt aus, wenn der alte Wert der erwartete ist, andernfalls liest er den alten Wert (Funktion) | |
| atomare Addition (Funktion) | |
| atomare Subtraktion (Funktion) | |
| atomares bitweises ODER (Funktion) | |
| atomares bitweises exklusives ODER (Funktion) | |
| atomares bitweises UND (Funktion) | |
Flag-Typ und Operationen | |
| (C11) |
sperrfreies atomares boolesches Flag (Struktur) |
| setzt ein atomic_flag auf true und gibt den alten Wert zurück (Funktion) | |
| setzt ein atomic_flag auf false (Funktion) | |
Initialisierung | |
| (C11) |
initialisiert ein vorhandenes atomares Objekt (Funktion) |
| (C11)(veraltet in C17)(entfernt in C23) |
initialisiert ein neues atomares Objekt (Makro-Funktion) |
| (C11) |
initialisiert ein neues atomic_flag (Makro-Konstante) |
Speichersynchronisationsordnung | |
| (C11) |
definiert Speicherreihenfolgebeschränkungen (Enum) |
| (C11) |
bricht eine Abhängigkeitskette für memory_order_consume (Makro-Funktion) |
| (C11) |
allgemeines speicherordnungsabhängiges Fence-Synchronisationsprimitiv (Funktion) |
| (C11) |
Fence zwischen einem Thread und einem Signal-Handler, der im selben Thread ausgeführt wird (Funktion) |
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 |
| (C11) |
erzeugt einen Mutex (Funktion) |
| (C11) |
blockiert, bis ein Mutex gesperrt ist (Funktion) |
| (C11) |
blockiert, bis ein Mutex gesperrt ist, oder läuft ab (Funktion) |
| (C11) |
sperrt einen Mutex oder kehrt zurück, ohne zu blockieren, wenn er bereits gesperrt ist (Funktion) |
| (C11) |
entsperrt einen Mutex (Funktion) |
| (C11) |
zerstört einen Mutex (Funktion) |
| (C11)(C11)(C11) |
definiert den Typ eines Mutex (Enum) |
Einmaliger Aufruf | |
| (C11) |
ruft eine Funktion genau einmal auf (Funktion) |
[bearbeiten] Bedingungsvariablen
| Definiert im Header
<threads.h> | |
cnd_t
|
Kennung der Bedingungsvariable |
| (C11) |
erzeugt eine Bedingungsvariable (Funktion) |
| (C11) |
entblockiert einen Thread, der auf eine Bedingungsvariable wartet (Funktion) |
| (C11) |
entblockiert alle Threads, die auf eine Bedingungsvariable warten (Funktion) |
| (C11) |
blockiert auf einer Bedingungsvariable (Funktion) |
| (C11) |
blockiert auf einer Bedingungsvariable mit Timeout (Funktion) |
| (C11) |
zerstört eine Bedingungsvariable (Funktion) |
[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) |
tss_t
|
Thread-spezifischer Speicherzeiger |
| (C11) |
maximale Anzahl von Aufrufen der Destruktoren (Makro-Konstante) |
tss_dtor_t(C11) |
Funktionszeigertyp void(*)(void*), verwendet für TSS-Destruktoren (typedef) |
| (C11) |
erzeugt einen thread-spezifischen Speicherzeiger mit einem gegebenen Destruktor (Funktion) |
| (C11) |
liest aus dem thread-spezifischen Speicher (Funktion) |
| (C11) |
schreibt in den thread-spezifischen Speicher (Funktion) |
| (C11) |
gibt die Ressourcen frei, die von einem gegebenen thread-spezifischen Zeiger gehalten werden (Funktion) |
[bearbeiten] Reservierte Bezeichner
In zukünftigen Revisionen des C-Standards
- Funktionsnamen, Typnamen und Aufzählungskonstanten, die entweder mit
cnd_,mtx_,thrd_odertss_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_odermemory_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 |