<atomic>
Definiert Klassen und Vorlagenklassen, um zu verwenden, um Typen zu erstellen, die atomare Vorgänge unterstützen.
#include <atomic>
Hinweise
Hinweis |
---|
In Code, der kompiliert wird, indem /clr oder /clr:pure verwendet, wird dieser Header blockiert. |
Ein atomaren Vorgang verfügt über zwei Schlüsseleigenschaften, die Ihnen helfen, mehrere Threads verwenden, um ein Objekt ordnungsgemäß bearbeiten, ohne Mutexsperren zu verwenden.
Da atomaren Vorgang atomar ist, ein zweiter atomaren Vorgang auf demselben Objekt von einem anderen Thread der Zustand des Objekts nur vor oder nach dem ersten atomaren Vorgang abzurufen.
Auf Grundlage sein memory_order-Argument richtet atomaren Vorgang Reihenfolgenanforderungen für die Sichtbarkeit der Auswirkungen anderer atomaren Vorgänge im gleichen Thread ein.Daher unterdrückt er Compileroptimierungen, die die Reihenfolgenanforderungen verstoßen.
Auf einigen Plattformen ist es möglicherweise nicht möglich, atomare Operationen für eine Typen effizient zu implementieren, ohne mutex Sperren.Ein unteilbarer Typ ist wenn keine atomaren Vorgänge auf Sperren dieser Typen sperrenfrei.
Die - Klasse atomic_flag stellt einen minimalen unteilbaren Typ, der ein bool-Flag enthält.Die Vorgänge sind immer sperrenfrei.
Die Vorlagenklasse atomic<Ty> speichert ein Objekt des Argumenttyps Ty unteilbaren und bietet Zugriff auf diesem gespeicherten Wert.Sie können es instanziieren, indem Sie alle Typen verwenden, die, indem memcpy verwendet und getestet werden kann für Gleichheit kopiert werden, indem memcmp verwendet.Insbesondere können Sie sie mit benutzerdefinierten Typen verwenden, die diese Bedingungen und in vielen Fällen mit Gleitkommatypen erfüllen.
Die Vorlage verfügt über eine Reihe von Spezialisierungen für ganzzahlige Typen und teilweise Spezialisierung für Zeiger.Diese Spezialisierungen stellen zusätzliche Vorgänge, die nicht durch die primäre Vorlage verfügbar sind.
Zeiger-Spezialisierungen
Die teilweisen Spezialisierungen atomic<Ty *> gelten für alle Zeigertypen zu.Sie stellen Methoden für Zeigerarithmetik bereit.
Ganzzahlige Spezialisierungen
Die atomic<integral> Spezialisierungen gelten für alle ganzzahligen Typen zu.Sie stellen zusätzliche Vorgänge, die nicht durch die primäre Vorlage verfügbar sind.
Jeder atomic<integral>-Typ verfügt über ein entsprechendes Makro, das Sie in if directive verwenden können, um zur Kompilierungszeit zu bestimmen, ob Vorgänge für diesen Typ sperrenfrei sind.Wenn der Wert des Makros null ist, sind Vorgänge auf den Typ nicht sperrenfrei.Wenn der Wert 1 ist, sind möglicherweise Vorgänge sperrenfrei, und eine Laufzeitüberprüfung ist erforderlich.Wenn der Wert 2 ist, sind Vorgänge sperrenfrei.Sie können die Funktion atomic_is_lock_free verwenden, um zur Laufzeit zu bestimmen, ob Vorgänge auf dem Typ sperrenfrei sind.
Für jeden der ganzzahligen Typen, gibt es einen entsprechenden unteilbaren benannten Typ, der ein Objekt dieses Typs ganzzahligen verwaltet.Jeder atomic_integral-Typ hat den gleichen Satz von Memberfunktionen wie die entsprechende Instanziierung von atomic<Ty> und kann auf eine der unteilbaren Funktionen des Nichtmitgliedes übergeben werden.
atomic_integral-Typ |
Ganzzahliger Typ |
atomic_is_lock_free-Makro |
---|---|---|
atomic_char |
char |
ATOMIC_CHAR_LOCK_FREE |
atomic_schar |
signed char |
ATOMIC_CHAR_LOCK_FREE |
atomic_uchar |
unsigned char |
ATOMIC_CHAR_LOCK_FREE |
atomic_char16_t |
char16_t |
ATOMIC_CHAR16_T_LOCK_FREE |
atomic_char32_t |
char32_t |
ATOMIC_CHAR32_T_LOCK_FREE |
atomic_wchar_t |
wchar_t |
ATOMIC_WCHAR_T_LOCK_FREE |
atomic_short |
short |
ATOMIC_SHORT_LOCK_FREE |
atomic_ushort |
unsigned short |
ATOMIC_SHORT_LOCK_FREE |
atomic_int |
int |
ATOMIC_INT_LOCK_FREE |
atomic_uint |
unsigned int |
ATOMIC_INT_LOCK_FREE |
atomic_long |
long |
ATOMIC_LONG_LOCK_FREE |
atomic_ulong |
unsigned long |
ATOMIC_LONG_LOCK_FREE |
atomic_llong |
long long |
ATOMIC_LLONG_LOCK_FREE |
atomic_ullong |
unsigned long long |
ATOMIC_LLONG_LOCK_FREE |
Namen einer Typdefinition (typedef) sind für Spezialisierungen der unteilbaren Vorlage für einige der Typen, die im Header <inttypes.h>definiert werden.
Unteilbarer Typ |
Typedef-Name |
---|---|
atomic_int8_t |
atomic<int8_t> |
atomic_uint8_t |
atomic<uint8_t> |
atomic_int16_t |
atomic<int16_t> |
atomic_uint16_t |
atomic<uint16_t> |
atomic_int32_t |
atomic<int32_t> |
atomic_uint32_t |
atomic<uint32_t> |
atomic_int64_t |
atomic<int64_t> |
atomic_uint64_t |
atomic<uint64_t> |
atomic_int_least8_t |
atomic<int_least8_t> |
atomic_uint_least8_t |
atomic<uint_least8_t> |
atomic_int_least16_t |
atomic<int_least16_t> |
atomic_uint_least16_t |
atomic<uint_least16_t> |
atomic_int_least32_t |
atomic<int_least32_t> |
atomic_uint_least32_t |
atomic<uint_least32_t> |
atomic_int_least64_t |
atomic<int_least64_t> |
atomic_uint_least64_t |
atomic<uint_least64_t> |
atomic_int_fast8_t |
atomic<int_fast8_t> |
atomic_uint_fast8_t |
atomic<uint_fast8_t> |
atomic_int_fast16_t |
atomic<int_fast16_t> |
atomic_uint_fast16_ |
atomic<uint_fast16_t> |
atomic_int_fast32_t |
atomic<int_fast32_t> |
atomic_uint_fast32_t |
atomic<uint_fast32_t> |
atomic_int_fast64_t |
atomic<int_fast64_t> |
atomic_uint_fast64_t |
atomic<uint_fast64_t> |
atomic_intptr_t |
atomic<intptr_t> |
atomic_uintptr_t |
atomic<uintptr_t> |
atomic_size_t |
atomic<size_t> |
atomic_ptrdiff_t |
atomic<ptrdiff_t> |
atomic_intmax_t |
atomic<intmax_t> |
atomic_uintmax_t |
atomic<uintmax_t> |
Strukturen
Name |
Description |
---|---|
Beschreibt ein Objekt, das atomare Vorgänge auf einem gespeicherten Wert ausführt. |
|
Beschreibt ein Objekt, dem atomar Sätze und ein bool-Flag gelöscht wird. |
Enumerationen
Name |
Description |
---|---|
Stellt symbolische Namen für Synchronisierungsoperationen auf Speicheradressen.Diese Vorgänge auswirken, wie Zuweisungen in einem Thread in anderen sichtbar werden. |
Funktionen
In der folgenden Liste sind die Funktionen, die nicht in _explicit beenden, die entsprechenden Semantik _explicit, allerdings haben die impliziten memory_order-Argumente von memory_order_seq_cst.
Name |
Description |
---|---|
Führt ein unteilbares vergleichen und austauschen Vorgang aus. |
|
Führt ein unteilbares vergleichen und austauschen Vorgang aus. |
|
Führt ein schwaches unteilbares vergleichen und austauschen Vorgang aus. |
|
Führt ein schwaches unteilbares vergleichen und austauschen Vorgang aus. |
|
Ersetzt einen gespeicherten Wert. |
|
Ersetzt einen gespeicherten Wert. |
|
Fügt einen angegebenen Wert einem vorhandenen gespeicherten Wert hinzu. |
|
Fügt einen angegebenen Wert einem vorhandenen gespeicherten Wert hinzu. |
|
Führt eine bitweise and auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Führt eine bitweise and auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Führt eine bitweise or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Führt eine bitweise or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Subtrahiert einen angegebenen Wert aus einem vorhandenen gespeicherten Wert. |
|
Subtrahiert einen angegebenen Wert aus einem vorhandenen gespeicherten Wert. |
|
Führt eine bitweise exclusive or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Führt eine bitweise exclusive or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus. |
|
Legt das - Flag in einem atomic_flag-Objekt zu false fest. |
|
Legt das - Flag in einem atomic_flag-Objekt zu false fest. |
|
Legt das - Flag in einem atomic_flag-Objekt zu true fest. |
|
Legt das - Flag in einem atomic_flag-Objekt zu true fest. |
|
Legt den gespeicherten Wert in einem atomic-Objekt fest. |
|
Gibt an, ob atomare Vorgänge auf einem angegebenen Objekt sperrenfrei sind. |
|
Ruft atomar eines Werts. |
|
Ruft atomar eines Werts. |
|
Fungiert als Zaun auf, der Arbeitsspeicherreihenfolgenanforderungen zwischen Zäunen in einem aufrufenden Thread einrichtet, der die Signalhandler verfügt, die im gleichen Thread ausgeführt werden. |
|
Speichert atomar einen Wert. |
|
Speichert atomar einen Wert. |
|
Fungiert als Zaun auf, der Arbeitsspeicherreihenfolgenanforderungen in Bezug auf andere Zäune einrichtet. |
|
Unterteilt eine mögliche Abhängigkeitskette. |