Freigeben über


<atomic>

Definiert Klassen und Vorlagenklassen, um zu verwenden, um Typen zu erstellen, die atomare Vorgänge unterstützen.

#include <atomic>

Hinweise

HinweisHinweis

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

atomic-Struktur

Beschreibt ein Objekt, das atomare Vorgänge auf einem gespeicherten Wert ausführt.

atomic_flag-Struktur

Beschreibt ein Objekt, dem atomar Sätze und ein bool-Flag gelöscht wird.

Enumerationen

Name

Description

memory_order Enumeration

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

atomic_compare_exchange_strong-Funktion

Führt ein unteilbares vergleichen und austauschen Vorgang aus.

atomic_compare_exchange_strong_explicit-Funktion

Führt ein unteilbares vergleichen und austauschen Vorgang aus.

atomic_compare_exchange_weak-Funktion

Führt ein schwaches unteilbares vergleichen und austauschen Vorgang aus.

atomic_compare_exchange_weak_explicit-Funktion

Führt ein schwaches unteilbares vergleichen und austauschen Vorgang aus.

atomic_exchange-Funktion

Ersetzt einen gespeicherten Wert.

atomic_exchange_explicit-Funktion

Ersetzt einen gespeicherten Wert.

atomic_fetch_add-Funktion

Fügt einen angegebenen Wert einem vorhandenen gespeicherten Wert hinzu.

atomic_fetch_add_explicit-Funktion

Fügt einen angegebenen Wert einem vorhandenen gespeicherten Wert hinzu.

atomic_fetch_and-Funktion

Führt eine bitweise and auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_fetch_and_explicit-Funktion

Führt eine bitweise and auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_fetch_or-Funktion

Führt eine bitweise or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_fetch_or_explicit-Funktion

Führt eine bitweise or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_fetch_sub-Funktion

Subtrahiert einen angegebenen Wert aus einem vorhandenen gespeicherten Wert.

atomic_fetch_sub_explicit-Funktion

Subtrahiert einen angegebenen Wert aus einem vorhandenen gespeicherten Wert.

atomic_fetch_xor-Funktion

Führt eine bitweise exclusive or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_fetch_xor_explicit-Funktion

Führt eine bitweise exclusive or auf einen angegebenen Wert und einem vorhandenen gespeicherten Wert aus.

atomic_flag_clear-Funktion

Legt das - Flag in einem atomic_flag-Objekt zu false fest.

atomic_flag_clear_explicit-Funktion

Legt das - Flag in einem atomic_flag-Objekt zu false fest.

atomic_flag_test_and_set-Funktion

Legt das - Flag in einem atomic_flag-Objekt zu true fest.

atomic_flag_test_and_set_explicit-Funktion

Legt das - Flag in einem atomic_flag-Objekt zu true fest.

atomic_init-Funktion

Legt den gespeicherten Wert in einem atomic-Objekt fest.

atomic_is_lock_free-Funktion

Gibt an, ob atomare Vorgänge auf einem angegebenen Objekt sperrenfrei sind.

atomic_load-Funktion

Ruft atomar eines Werts.

atomic_load_explicit-Funktion

Ruft atomar eines Werts.

atomic_signal_fence Funktion

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.

atomic_store Funktion

Speichert atomar einen Wert.

atomic_store_explicit-Funktion

Speichert atomar einen Wert.

atomic_thread_fence Funktion

Fungiert als Zaun auf, der Arbeitsspeicherreihenfolgenanforderungen in Bezug auf andere Zäune einrichtet.

kill_dependency-Funktion

Unterteilt eine mögliche Abhängigkeitskette.

Siehe auch

Referenz

Standardvorlagenbibliothek

Weitere Ressourcen

Headerdateien