<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 Sie /clr oder /clr:pure verwendet, wird diese Header blockiert.
Ein atomaren Vorgang verfügt beiden Haupteigenschaften, die Ihnen helfen, mehrere Threads verwenden, um ein Objekt ordnungsgemäß bearbeiten, ohne Mutexsperren zu verwenden.
Da atomaren Vorgang unteilbar ist, ein zweiter atomaren Vorgang auf demselben Objekt von einem anderen Thread den Zustand des Objekts vor oder nach dem ersten atomaren Vorgang erhalten.
Auf Grundlage memory_order sein Argument legt atomaren Vorgang Reihenfolgenanforderungen für die Sichtbarkeit der Effekte anderer atomaren Vorgänge im gleichen Thread ein. Folglich unterdrückt der Compileroptimierungen, die die Reihenfolgenanforderungen verstoßen.
Auf einigen Plattformen ist es möglicherweise nicht möglich, von Operationen für Typen eine effiziente implementieren, ohne mutex Sperren. Ein unteilbarer Typ ist sperrenfrei, wenn keine atomaren Vorgängen für diese Typen sperrt.
Die 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 seinen Argumenttyps Ty und bietet Zugriff unteilbaren zu diesem gespeicherten Wert. Sie können es instanziieren, indem Sie einen Typ verwenden, der, mit dem memcpy verwendet und getestet werden kann für Gleichheit kopiert werden, indem Sie memcmp verwenden. Insbesondere können Sie sie mit benutzerdefinierten Typen verwenden, die diese Bedingungen und in vielen Fällen für Gleitkommatypen erfüllen.
Die Vorlage besitzt auch einen Satz Spezialisierungen für ganzzahlige Typen und teilweise Spezialisierung für Zeiger. Spezialisierungen Diese stellen zusätzliche Vorgängen, die nicht durch die primäre Vorlage verfügbar sind.
Zeiger-Spezialisierungen
Die partielle Spezialisierungen atomic<Ty *> gelten für alle Zeigertypen zu. Sie stellen Methoden für Zeigerarithmetik bereit.
Ganzzahlige Spezialisierungen
Die atomic<integral> gelten für alle Spezialisierungen ganzzahligen Typen. Sie stellen zusätzliche Vorgängen, die nicht durch die primäre Vorlage verfügbar sind.
Jeder Typ atomic<integral> verfügt über ein entsprechendes Makro, das Sie in if directive verwenden können, um zur Kompilierungszeit nicht feststellen, ob Vorgänge auf diesem Typ sperrenfrei sind. Wenn der Wert des Makros ist, sind Operationen mit dem Typ nicht sperrenfrei. Wenn der Wert 1 ist, gestalten sich Operationen sperrenfrei, und könnte die Überprüfung erforderlich. Wenn der Wert 2 ist, sind sperrenfrei Vorgänge. Sie können die Funktion atomic_is_lock_free verwenden, um zur Laufzeit zu bestimmen, ob Vorgänge auf den Typ sperrenfrei sind.
Für jeden der ganzzahligen Typen, entspricht ein zugehöriger unteilbaren benannten Typ, der ein Objekt dieses Ganzzahltyp verwaltet. Jeder Typ atomic_integral hat denselben Satz von Memberfunktionen wie die entsprechende Instanziierung von atomic<Ty> und kann auf den unteilbaren Funktionen des Nichtmitgliedes übergeben werden.
atomic_integral-Typ |
Ganzzahliger Typ |
Makro atomic_is_lock_free |
---|---|---|
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 |
Typedef-Namen sind für Spezialisierungen der unteilbaren Vorlage für einige der Typen, die in der Headerdatei <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 |
Beschreibung |
---|---|
Beschreibt ein Objekt, das von Operationen für einen gespeicherten Wert ausführt. |
|
Beschreibt ein Objekt, das ein Flag bool-Flag atomisch festlegt und löscht. |
Enumerationen
Name |
Beschreibung |
---|---|
Stellt symbolische Namen für Synchronisierungsvorgänge auf Speicheradressen bereit. Diese Vorgänge wirken sich auf das Sichtbarwerden der Zuweisung eines Thread in einem anderen aus. |
Funktionen
In der folgenden Liste werden die Funktionen, die nicht in _explicit beenden, die Semantik entsprechenden _explicit, außer dass sie haben die impliziten memory_order-Argumente von memory_order_seq_cst.
Name |
Beschreibung |
---|---|
Führt einen atomischen Vergleichs- und Austausch-Vorgang aus. |
|
Führt einen atomischen Vergleichs- und Austausch-Vorgang aus. |
|
Führt einen schwachen atomischen Vergleichs- und Austausch-Vorgang aus. |
|
Führt einen schwachen atomischen Vergleichs- und Austausch-Vorgang aus. |
|
Ersetzt einen gespeicherten Wert. |
|
Ersetzt einen gespeicherten Wert. |
|
Fügt einem angegebenen Wert einem vorhandenen gespeicherten Wert hinzu. |
|
Fügt einem angegebenen Wert einem vorhandenen gespeicherten Wert hinzu. |
|
Führt eine bitweise and auf einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
Führt eine bitweise and auf einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
Führt eine bitweise or auf einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
Führt eine bitweise or auf einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
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 einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
Führt eine bitweise exclusive or auf einem angegebenen Wert und einem vorhandenen gespeicherten Wert. |
|
Legt das Flag in einem atomic_flag-Objekt auf false fest. |
|
Legt das Flag in einem atomic_flag-Objekt auf false fest. |
|
Legt das Flag in einem atomic_flag-Objekt auf true fest. |
|
Legt das Flag in einem atomic_flag-Objekt auf true fest. |
|
Legt den gespeicherten Wert in einem atomic-Objekt fest. |
|
Gibt an, ob von Operationen bei einem angegebenen Objekt sperrenfrei sind. |
|
Ruft atomar einen Wert ab. |
|
Ruft atomar einen Wert ab. |
|
Fungiert als Zaun auf, der Arbeitsspeicherreihenfolgenanforderungen zwischen Zäunen in einem aufrufende Thread wird, 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. |
|
Teilt eine mögliche Abhängigkeitskette. |