Namensräume
Varianten
Aktionen

Concurrency support library (seit C++11)

Von cppreference.com
< cpp
 
 
Bibliothek für nebenläufige Programmierung
Threads
(C++11)
(C++20)
this_thread Namespace
(C++11)
(C++11)
(C++11)
Kooperatives Beenden
Gegenseitiger Ausschluss
(C++11)
Allgemeines Sperrungsmanagement
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Bedingungsvariablen
(C++11)
Semaphoren
Latches und Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Sichere Wiederherstellung
(C++26)
Hazard Pointer
Atomare Typen
(C++11)
(C++20)
Initialisierung von atomaren Typen
(C++11)(veraltet in C++20)
(C++11)(veraltet in C++20)
Speicherordnung
(C++11)(deprecated in C++26)
Freie Funktionen für atomare Operationen
Freie Funktionen für atomare Flags
 

C++ enthält integrierte Unterstützung für Threads, atomare Operationen, gegenseitigen Ausschluss, Bedingungsvariablen und Futures.

Inhalt

[bearbeiten] Threads

Threads ermöglichen Programmen die Ausführung über mehrere Prozessorkerne hinweg.

Definiert in Header <thread>
(C++11)
verwaltet einen separaten Thread
(Klasse) [bearbeiten]
(C++20)
std::thread mit Unterstützung für automatische Wiederaufnahme und Abbruch
(Klasse) [bearbeiten]
Funktionen zur Verwaltung des aktuellen Threads
Definiert im Namespace this_thread
(C++11)
legt nahe, dass die Implementierung die Ausführung von Threads neu plant
(Funktion) [bearbeiten]
(C++11)
gibt die Thread-ID des aktuellen Threads zurück
(Funktion) [bearbeiten]
(C++11)
stoppt die Ausführung des aktuellen Threads für eine angegebene Zeitdauer
(Funktion) [bearbeiten]
stoppt die Ausführung des aktuellen Threads bis zu einem angegebenen Zeitpunkt
(Funktion) [bearbeiten]

[bearbeiten] Kooperatives Beenden (seit C++20)

Die Komponenten *Stop Source*, *Stop Token* und *Stop Callback* können verwendet werden, um asynchron anzufordern, dass eine Operation zeitnah stoppt, typischerweise weil das Ergebnis nicht mehr benötigt wird. Eine solche Anforderung wird als *Stop-Anforderung* bezeichnet.

Diese Komponenten spezifizieren die Semantik des gemeinsamen Zugriffs auf einen *Stop-Zustand*. Jedes Objekt, das eine dieser Komponenten modelliert und sich auf denselben Stop-Zustand bezieht, ist eine zugehörige Stop-Source, ein Stop-Token bzw. ein Stop-Callback.

Die Konzepte stoppable-source, stoppable_token und stoppable-callback-for spezifizieren die erforderliche Syntax und modellieren die Semantik von Stop-Source, Stop-Token und Stop-Callback.

(seit C++26)

Sie sind konzipiert

  • um ein gestopptes Abschließen einer durch execution::connect erstellten asynchronen Operation durchzuführen,
(seit C++26)
  • oder für eine benutzerdefinierte Implementierung der Ausführungsverwaltung.

Tatsächlich müssen sie nicht einmal zum "Stoppen" von etwas verwendet werden, sondern können stattdessen beispielsweise für eine thread-sichere einmalige Auslösung von Funktionsaufrufen verwendet werden.

Definiert in Header <stop_token>
Stop-Token-Typen
eine Schnittstelle zur Abfrage, ob eine Abbruchanforderung von std::jthread gestellt wurde
(Klasse) [bearbeiten]
stellt eine Stop-Token-Schnittstelle bereit, bei der ein Stoppen weder möglich noch angefordert ist
(Klasse) [bearbeiten]
ein Stop-Token, das den Stop-Zustand seines zugehörigen std::inplace_stop_source-Objekts referenziert
(Klasse) [bearbeiten]
Stop-Source-Typen
Klasse, die eine Anforderung darstellt, einen oder mehrere std::jthreads zu stoppen
(Klasse) [bearbeiten]
eine stoppable-source, die alleiniger Eigentümer des Stop-Zustands ist
(Klasse) [bearbeiten]
Stop-Callback-Typen
eine Schnittstelle zur Registrierung von Callbacks bei der Abbruchanforderung von std::jthread
(Klassen-Template) [bearbeiten]
ein Stop-Callback für std::inplace_stop_token
(Klassen-Template) [bearbeiten]
ruft den Callback-Typ für einen gegebenen Stop-Token-Typ ab
(Alias-Template)[bearbeiten]
Konzepte (seit C++20)
spezifiziert die grundlegende Schnittstelle von Stop-Tokens, die Abfragen für Stop-Anforderungen und die Möglichkeit des Stoppens erlaubt
(Konzept) [bearbeiten]
spezifiziert ein Stop-Token, das kein Stoppen erlaubt
(Konzept) [bearbeiten]
spezifiziert, dass ein Typ eine Fabrik für zugehörige Stop-Tokens ist und eine Stop-Anforderung darauf erfolgen kann
(nur zur Veranschaulichung verwendetes Konzept*)[bearbeiten]
spezifiziert eine Schnittstelle zur Registrierung von Callbacks bei einem gegebenen Stop-Token-Typ
(nur zur Veranschaulichung verwendetes Konzept*)[bearbeiten]

[bearbeiten] Cache-Größen-Zugriff (seit C++17)

Definiert im Header <new>
minimaler Abstand zur Vermeidung von False Sharing
maximaler Abstand zur Förderung von True Sharing
(Konstante) [bearbeiten]

[bearbeiten] Atomare Operationen

Diese Komponenten werden für feingranulare atomare Operationen bereitgestellt, die eine sperrfreie nebenläufige Programmierung ermöglichen. Jede atomare Operation ist in Bezug auf jede andere atomare Operation, die dasselbe Objekt betrifft, unteilbar. Atomare Objekte sind frei von Datenrennen.

Definiert in Header <atomic>
Atomare Typen
(C++11)
atomares Klassentemplate und Spezialisierungen für boolesche, integrale, Gleitkomma-(seit C++20) und Zeigertypen
(Klassen-Template) [bearbeiten]
ermöglicht atomare Operationen auf nicht-atomaren Objekten
(Klassen-Template) [bearbeiten]
Operationen auf atomaren Typen
prüft, ob die Operationen des atomaren Typs sperrfrei sind
(Funktions-Template) [bearbeiten]
ersetzt atomar den Wert des atomaren Objekts durch ein nicht-atomares Argument
(Funktions-Template) [bearbeiten]
liest atomar den Wert aus einem atomaren Objekt
(Funktions-Template) [bearbeiten]
ersetzt atomar den Wert des atomaren Objekts durch ein nicht-atomares Argument und gibt den alten Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
vergleicht atomar den Wert des atomaren Objekts mit einem nicht-atomaren Argument und führt bei Gleichheit einen atomaren Austausch oder bei Ungleichheit eine atomare Ladeoperation durch
(Funktions-Template) [bearbeiten]
addiert einen nicht-atomaren Wert zu einem atomaren Objekt und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
subtrahiert einen nicht-atomaren Wert von einem atomaren Objekt und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
ersetzt das atomare Objekt durch das Ergebnis einer bitweisen AND-Operation mit einem nicht-atomaren Argument und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
ersetzt das atomare Objekt durch das Ergebnis einer bitweisen OR-Operation mit einem nicht-atomaren Argument und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
ersetzt das atomare Objekt durch das Ergebnis einer bitweisen XOR-Operation mit einem nicht-atomaren Argument und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
ersetzt das atomare Objekt durch das Ergebnis von std::max mit einem nicht-atomaren Argument und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
ersetzt das atomare Objekt durch das Ergebnis von std::min mit einem nicht-atomaren Argument und gibt den vorherigen Wert des atomaren Objekts zurück
(Funktions-Template) [bearbeiten]
blockiert den Thread, bis er benachrichtigt wird und der atomare Wert sich ändert
(Funktions-Template) [bearbeiten]
benachrichtigt einen Thread, der in atomic_wait blockiert ist
(Funktions-Template) [bearbeiten]
benachrichtigt alle Threads, die in atomic_wait blockiert sind
(Funktions-Template) [bearbeiten]
Flag-Typ und Operationen
der sperrfreie boolesche atomare Typ
(Klasse) [bearbeiten]
setzt das Flag atomar auf true und gibt seinen vorherigen Wert zurück
(Funktion) [bearbeiten]
setzt den Wert des Flags atomar auf false
(Funktion) [bearbeiten]
gibt den Wert des Flags atomar zurück
(Funktion) [bearbeiten]
blockiert den Thread, bis er benachrichtigt wird und sich das Flag ändert
(Funktion) [bearbeiten]
benachrichtigt einen Thread, der in atomic_flag_wait blockiert ist
(Funktion) [bearbeiten]
benachrichtigt alle Threads, die in atomic_flag_wait blockiert sind
(Funktion) [bearbeiten]
Initialisierung
(C++11)(veraltet in C++20)
nicht-atomare Initialisierung eines standardmäßig konstruierten atomaren Objekts
(Funktions-Template) [bearbeiten]
(C++11)(veraltet in C++20)
konstante Initialisierung einer atomaren Variable mit statischer Speicherdauer
(Funktionsmakro) [bearbeiten]
initialisiert ein std::atomic_flag auf false
(Makro-Konstante) [bearbeiten]
Speichersynchronisationsordnung
definiert Speicherordnungseinschränkungen für die gegebene atomare Operation
(Enum) [bearbeiten]
(C++11)(veraltet in C++26)
entfernt das angegebene Objekt aus dem Abhängigkeitsbaum von std::memory_order_consume
(Funktions-Template) [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]
Definiert in Header <stdatomic.h>
C-kompatible Makros (seit C++23)
(C++23)
kompatibles Makro, so dass _Atomic(T) identisch mit std::atomic<T> ist
(Funktionsmakro) [bearbeiten]

Weder das _Atomic-Makro noch eine der nicht-Makro-Deklarationen im globalen Namespace werden von einem C++-Standardbibliotheksheader außer <stdatomic.h> bereitgestellt.

[bearbeiten] Gegenseitiger Ausschluss

Algorithmen für gegenseitigen Ausschluss verhindern, dass mehrere Threads gleichzeitig auf gemeinsam genutzte Ressourcen zugreifen. Dies verhindert Datenrennen und bietet Unterstützung für die Synchronisation zwischen Threads.

Definiert in Header <mutex>
(C++11)
bietet grundlegende Gegenseitiger-Ausschluss-Funktionen
(Klasse) [bearbeiten]
bietet Gegenseitiger-Ausschluss-Funktionen, die ein Sperren mit Timeout implementieren
(Klasse) [bearbeiten]
bietet Gegenseitiger-Ausschluss-Funktionen, die von demselben Thread rekursiv gesperrt werden können
(Klasse) [bearbeiten]
bietet Gegenseitiger-Ausschluss-Funktionen, die rekursiv gesperrt werden können
von demselben Thread und implementiert ein Sperren mit Timeout
(Klasse) [bearbeiten]
Definiert in Header <shared_mutex>
bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen
(Klasse) [bearbeiten]
bietet gemeinsame Gegenseitiger-Ausschluss-Funktionen und implementiert ein Sperren mit Timeout
(Klasse) [bearbeiten]
Allgemeines Sperrungsmanagement
Definiert in Header <mutex>
implementiert einen streng bereichsbezogenen Mutex-Besitz-Wrapper
(Klassen-Template) [bearbeiten]
todesfallsichere RAII-Hülle für mehrere Mutexe
(Klassen-Template) [bearbeiten]
implementiert verschiebbaren Mutex-Besitz-Wrapper
(Klassenvorlage) [bearbeiten]
implementiert verschiebbaren Shared-Mutex-Besitz-Wrapper
(Klassenvorlage) [bearbeiten]
Tags zur Angabe der Sperrstrategie
(Tag)[bearbeiten]
Generische Sperralgorithmen
(C++11)
versucht, den Besitz von Mutexen durch wiederholte Aufrufe von try_lock zu erlangen
(Funktionsvorlage) [bearbeiten]
(C++11)
sperrt angegebene Mutexe, blockiert, wenn einer nicht verfügbar ist
(Funktionsvorlage) [bearbeiten]
Einmaliger Aufruf
(C++11)
Hilfsobjekt, um sicherzustellen, dass call_once die Funktion nur einmal aufruft
(Klasse) [bearbeiten]
(C++11)
ruft eine Funktion nur einmal auf, auch wenn sie von mehreren Threads aufgerufen wird
(Funktionsvorlage) [bearbeiten]

[bearbeiten] Bedingungsvariablen

Eine Bedingungsvariable ist ein Synchronisationsprimitiv, das es mehreren Threads ermöglicht, miteinander zu kommunizieren. Sie erlaubt einer bestimmten Anzahl von Threads, auf Benachrichtigungen von einem anderen Thread zu warten (möglicherweise mit einem Timeout), dass sie fortfahren dürfen. Eine Bedingungsvariable ist immer mit einem Mutex verbunden.

Definiert im Header <condition_variable>
bietet eine Bedingungsvariable, die mit einem std::unique_lock verbunden ist
(Klasse) [bearbeiten]
bietet eine Bedingungsvariable, die mit jedem Sperrtyp verbunden ist
(Klasse) [bearbeiten]
plant die Ausführung von notify_all, sobald dieser Thread vollständig beendet ist
(Funktion) [bearbeiten]
(C++11)
listet die möglichen Ergebnisse von zeitgesteuerten Wartezeiten auf Bedingungsvariablen auf
(Enum) [bearbeiten]

[bearbeiten] Semaphoren (seit C++20)

Ein Semaphor ist ein leichtgewichtiges Synchronisationsprimitiv, das verwendet wird, um den gleichzeitigen Zugriff auf eine gemeinsam genutzte Ressource einzuschränken. Wenn beides ausreicht, kann ein Semaphor effizienter sein als eine Bedingungsvariable.

Definiert im Header <semaphore>
Semaphor, der eine nicht-negative Ressourcenanzahl modelliert
(Klassenvorlage) [bearbeiten]
Semaphor, der nur zwei Zustände hat
(Typedef) [bearbeiten]

[bearbeiten] Latches und Barrieren (seit C++20)

Latches und Barrieren sind Mechanismen zur Thread-Koordination, die es einer beliebigen Anzahl von Threads ermöglichen, zu blockieren, bis eine erwartete Anzahl von Threads eintrifft. Ein Latch kann nicht wiederverwendet werden, während eine Barriere wiederholt verwendet werden kann.

Definiert im Header <latch>
(C++20)
einmalig verwendbare Thread-Barriere
(Klasse) [bearbeiten]
Definiert im Header <barrier>
(C++20)
wiederverwendbare Thread-Barriere
(Klassenvorlage) [bearbeiten]

[bearbeiten] Futures

Die Standardbibliothek stellt Einrichtungen zur Verfügung, um Werte zu erhalten, die von asynchronen Aufgaben (d. h. in separaten Threads gestartete Funktionen) zurückgegeben werden, und um Ausnahmen abzufangen, die von diesen Aufgaben ausgelöst werden. Diese Werte werden in einem gemeinsamen Zustand übermittelt, in den die asynchrone Aufgabe ihren Rückgabewert schreiben oder eine Ausnahme speichern kann und der von anderen Threads, die Instanzen von std::future oder std::shared_future besitzen, die auf diesen gemeinsamen Zustand verweisen, untersucht, auf den gewartet und der anderweitig manipuliert werden kann.

Definiert im Header <future>
(C++11)
speichert einen Wert zur asynchronen Abfrage
(Klassenvorlage) [bearbeiten]
paketiert eine Funktion, um ihren Rückgabewert zur asynchronen Abfrage zu speichern
(Klassenvorlage) [bearbeiten]
(C++11)
wartet auf einen Wert, der asynchron gesetzt wird
(Klassenvorlage) [bearbeiten]
wartet auf einen Wert (möglicherweise von anderen Futures referenziert), der asynchron gesetzt wird
(Klassenvorlage) [bearbeiten]
(C++11)
führt eine Funktion asynchron aus (potenziell in einem neuen Thread) und gibt ein std::future zurück, das das Ergebnis enthalten wird
(Funktionsvorlage) [bearbeiten]
(C++11)
spezifiziert die Startrichtlinie für std::async
(Enum) [bearbeiten]
spezifiziert die Ergebnisse von zeitgesteuerten Wartezeiten, die auf std::future und std::shared_future ausgeführt werden
(Enum) [bearbeiten]
Future-Fehler
meldet einen Fehler im Zusammenhang mit Futures oder Promises
(Klasse) [bearbeiten]
identifiziert die Future-Fehlerkategorie
(Funktion) [bearbeiten]
identifiziert die Future-Fehlercodes
(Enum) [bearbeiten]

[bearbeiten] Sichere Wiederherstellung (seit C++26)

Sichere Wiederherstellungstechniken werden am häufigsten verwendet, um Zugriffs-Lösch-Rennen (access-deletion races) auf einfache Weise zu lösen.

Read-Copy-Update-Mechanismus
Definiert im Header <rcu>
ermöglicht den Schutz eines Objekts durch RCU
(Klassenvorlage) [bearbeiten]
stellt RCU-Schutzbereiche bereit
(Klasse) [bearbeiten]
gibt eine Referenz auf ein statisches Objekt vom Typ std::rcu_domain zurück
(Funktion) [bearbeiten]
blockiert, bis ein Schutzbereich in einer RCU-Domäne entsperrt wird
(Funktion) [bearbeiten]
kann geplante Operationen in einer RCU-Domäne auswerten und blockiert, bis alle vorherigen Auswertungen abgeschlossen sind
(Funktion) [bearbeiten]
plant die Auswertung einer angegebenen Funktion in einer RCU-Domäne, weist möglicherweise Speicher zu und ruft geplante Auswertungen auf
(Funktionsvorlage) [bearbeiten]
Hazard Pointer
Definiert im Header <hazard_pointer>
ermöglicht es einem Objekt, durch Hazard-Pointer geschützt zu werden
(Klassenvorlage) [bearbeiten]
Single-Writer-Multi-Reader-Zeiger, der zu jedem Zeitpunkt von höchstens einem Thread besessen werden kann
(Klasse) [bearbeiten]
konstruiert einen Hazard-Pointer
(Funktion) [bearbeiten]

[bearbeiten] Siehe auch

C-Dokumentation für Bibliothek für nebenläufige Unterstützung