std:: atomic_ref
|
Definiert im Header
<atomic>
|
||
|
template
<
class
T
>
struct atomic_ref ; |
(seit C++20) | |
Die
std::atomic_ref
-Klassenvorlage wendet atomare Operationen auf das Objekt an, auf das sie verweist.
Für die Lebensdauer des
std::atomic_ref
-Objekts wird das referenzierte Objekt als atomares Objekt betrachtet. Wenn ein Thread in ein atomares Objekt schreibt, während ein anderer Thread daraus liest, ist das Verhalten wohldefiniert (siehe
Speichermodell
für Details zu Datenrennen). Darüber hinaus können Zugriffe auf atomare Objekte Thread-synchronisation herstellen und nicht-atomare Speicherzugriffe gemäß
std::memory_order
anordnen.
Die Lebensdauer eines Objekts muss die Lebensdauer aller
std::atomic_ref
s überschreiten, die auf das Objekt verweisen. Solange eine
std::atomic_ref
-Instanz existiert, die auf ein Objekt verweist, muss auf das Objekt ausschließlich über diese
std::atomic_ref
-Instanzen zugegriffen werden. Kein Unterobjekt eines Objekts, auf das ein
std::atomic_ref
-Objekt verweist, darf gleichzeitig von einem anderen
std::atomic_ref
-Objekt referenziert werden.
Auf ein Objekt angewendete atomare Operationen durch einen
std::atomic_ref
sind atomar in Bezug auf atomare Operationen, die durch jeden anderen
std::atomic_ref
ausgeführt werden, der auf dasselbe Objekt verweist.
Wie bei
Referenzen
in der Kernsprache ist die Constness für
std::atomic_ref
oberflächlich - es ist möglich, den referenzierten Wert durch ein
const
std::atomic_ref
Objekt zu modifizieren.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Programm fehlerhaft:
- std:: is_trivially_copyable_v < T > ist false .
-
is_always_lock_freeist false und std:: is_volatile_v < T > ist true .
std::atomic_ref
ist
CopyConstructible
.
Inhaltsverzeichnis |
Verschachtelte Typen
| Typ | Definition |
value_type
|
std:: remove_cv_t < T > |
difference_type
|
|
Datenmitglieder
| Mitglied | Beschreibung |
T
*
ptr
|
der Zeiger auf das referenzierte Objekt
( Nur zur Veranschaulichung dienendes Mitgliedsobjekt* ) |
|
[static]
|
zeigt an, dass der Typ immer sperrfrei ist
(öffentliche statische Mitgliedskonstante) |
|
[static]
|
zeigt die erforderliche Ausrichtung eines Objekts an, das von
atomic_ref
referenziert werden soll
(öffentliche statische Mitgliedskonstante) |
Memberfunktionen
Konstruiert ein
atomic_ref
Objekt
(öffentliche Elementfunktion) |
|
speichert einen Wert in das durch ein
atomic_ref
Objekt referenzierte Objekt
(öffentliche Elementfunktion) |
|
prüft, ob das
atomic_ref
-Objekt sperrfrei ist
(öffentliche Elementfunktion) |
|
|
ersetzt den Wert des referenzierten Objekts atomar mit einem nicht-atomaren Argument
(öffentliche Elementfunktion) |
|
|
holt den Wert des referenzierten Objekts atomar
(öffentliche Elementfunktion) |
|
|
lädt einen Wert aus dem referenzierten Objekt
(öffentliche Elementfunktion) |
|
|
ersetzt den Wert des referenzierten Objekts atomar und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
vergleicht atomar den Wert des referenzierten Objekts mit einem nicht-atomaren Argument und führt einen atomaren Austausch durch, wenn gleich, oder eine atomare Ladung, wenn nicht gleich
(öffentliche Mitgliedsfunktion) |
|
|
blockiert den Thread, bis eine Benachrichtigung erfolgt und der atomare Wert sich ändert
(öffentliche Elementfunktion) |
|
|
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion) |
|
|
benachrichtigt alle Threads, die auf das atomare Objekt warten
(öffentliche Elementfunktion) |
|
|
(C++26)
|
gibt die Adresse des Objekts zurück
(öffentliche Elementfunktion) |
Nur bereitgestellt, wenn
|
|
|
fügt atomar das Argument zum im referenzierten Objekt gespeicherten Wert hinzu und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
subtrahiert atomar das Argument vom im referenzierten Objekt gespeicherten Wert und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
addiert oder subtrahiert atomar vom referenzierten Wert
(öffentliche Elementfunktion) |
|
Nur bereitgestellt, wenn
|
|
|
(C++26)
|
führt atomar
std::max
zwischen dem Argument und dem Wert des referenzierten Objekts aus und erhält den zuvor gehaltenen Wert
(öffentliche Member-Funktion) |
|
(C++26)
|
führt atomar
std::min
zwischen dem Argument und dem Wert des referenzierten Objekts aus und erhält den zuvor gehaltenen Wert
(öffentliche Member-Funktion) |
|
erhöht oder verringert das referenzierte Objekt atomar um eins
(öffentliche Elementfunktion) |
|
Nur bereitgestellt, wenn
|
|
|
führt atomar eine bitweise UND-Operation zwischen dem Argument und dem Wert des referenzierten Objekts durch und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
führt atomar eine bitweise OR-Operation zwischen dem Argument und dem Wert des referenzierten Objekts durch und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
führt atomar eine bitweise XOR-Operation zwischen dem Argument und dem Wert des referenzierten Objekts durch und erhält den zuvor gehaltenen Wert
(öffentliche Elementfunktion) |
|
|
führt atomare bitweise UND-, ODER- und XOR-Operationen mit dem referenzierten Wert aus
(öffentliche Elementfunktion) |
|
Spezialisierungen
Die Norm legt fest, dass
std::atomic_ref
folgende Spezialisierungen hat:
|
template
<>
struct atomic_ref < /*integral-type*/ > ; |
(1) | (seit C++20) |
|
template
<>
struct atomic_ref < /*floating-point-type*/ > ; |
(2) | (seit C++20) |
|
template
<
class
/*pointer-type*/
>
requires
/* siehe unten */
|
(3) | (seit C++20) |
Hinweise
Implementierungen können die angegebenen Spezialisierungen zusammenführen. Z.B. führt MSVC STL alle von ihnen in die primäre Vorlage zusammen.
Wenn
T
cv
void
oder ein Funktionstyp ist,
std
::
atomic_ref
<
T
*
>
(d.h.
std
::
atomic_ref
<
void
*
>
,
std
::
atomic_ref
<
int
(
*
)
(
)
>
etc.) besitzt weder
difference_type
noch Operationen, die Zeigerarithmetik erfordern
oder relationale Vergleiche
(seit C++26)
.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_atomic_ref
|
201806L
|
(C++20) |
std::atomic_ref
|
__cpp_lib_constexpr_atomic
|
202411L
|
(C++26) |
constexpr
std::atomic
und
std::atomic_ref
|
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
|
LWG 3508
( P3323R1 ) |
C++20 |
atomic_ref
<
T
>
hatte nicht implementierbare Operationen
wenn
T
ein
const
-Typ oder Zeiger-auf-Nicht-Objekt-Typ ist
|
diese Operationen sind entweder eingeschränkt
oder für ungeeignete
T
nicht bereitgestellt
|
Siehe auch
|
(C++11)
|
atomic-Klassen-Template und Spezialisierungen für bool, Ganzzahltypen,
Gleitkommatypen,
(seit C++20)
und Zeigertypen
(Klassen-Template) |