std:: atomic_... <std::shared_ptr>
|
Definiert in Header
<memory>
|
||
|
template
<
class
T
>
bool atomic_is_lock_free ( const std:: shared_ptr < T > * p ) ; |
(1) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
std:: shared_ptr < T > atomic_load ( const std:: shared_ptr < T > * p ) ; |
(2) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_load_explicit
|
(3) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
void atomic_store ( std:: shared_ptr < T > * p, std:: shared_ptr < T > r ) ; |
(4) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
void
atomic_store_explicit
|
(5) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange
|
(6) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange_explicit
|
(7) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak
|
(8) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong
|
(9) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong_explicit
|
(10) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak_explicit
|
(11) |
(seit C++11)
(veraltet in C++20) (entfernt in C++26) |
Wenn mehrere Ausführungsstränge auf dasselbe
std::shared_ptr
-Objekt ohne Synchronisierung zugreifen und einer dieser Zugriffe eine nicht-konstante Memberfunktion von
shared_ptr
verwendet, tritt ein Datenwettlauf auf, es sei denn, alle derartigen Zugriffe erfolgen über diese Funktionen, bei denen es sich um Überladungen der entsprechenden atomaren Zugriffsfunktionen handelt (
std::atomic_load
,
std::atomic_store
, etc.).
Beachten Sie, dass der Kontrollblock eines
shared_ptr
threadsicher ist: Unterschiedliche
std::shared_ptr
-Objekte können mit veränderbaren Operationen, wie
operator
=
oder
reset
, gleichzeitig von mehreren Threads zugänglich gemacht werden, selbst wenn diese Instanzen Kopien sind und denselben Kontrollblock intern teilen.
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
- Wenn diese äquivalent sind (denselben Zeigerwert speichern und entweder denselben Objektbesitz teilen oder beide leer sind), weist desired unter Verwendung der durch success spezifizierten Speicherordnungsbeschränkungen in * p zu und gibt true zurück.
- Wenn diese nicht äquivalent sind, weist * p unter Verwendung der durch failure spezifizierten Speicherordnungsbeschränkungen in * expected zu und gibt false zurück.
atomic_compare_exchange_weak_explicit
kann sporadisch fehlschlagen.
Wenn p ein Nullzeiger ist, ist das Verhalten dieser Funktionen allesamt undefiniert.
Inhaltsverzeichnis |
Parameter
| p, erwartet | - | ein Zeiger auf einen std::shared_ptr |
| r, gewünscht | - | ein std::shared_ptr |
| mo, Erfolg, Misserfolg | - | Speicherreihenfolge-Selektoren vom Typ std::memory_order |
Exceptions
Diese Funktionen werfen keine Ausnahmen.
Rückgabewert
Hinweise
Diese Funktionen werden typischerweise mit Mutexen implementiert, die in einer globalen Hash-Tabelle gespeichert werden, wobei der Zeigerwert als Schlüssel verwendet wird.
Das
Concurrency TS
bietet atomare Smart-Pointer-Klassen
atomic_shared_ptr
und
atomic_weak_ptr
als Ersatz für die Verwendung dieser Funktionen.
|
Diese Funktionen wurden zugunsten der Spezialisierungen der std::atomic -Vorlage als veraltet markiert: std:: atomic < std:: shared_ptr > und std:: atomic < std:: weak_ptr > . |
(seit C++20)
(bis C++26) |
|
Diese Funktionen wurden zugunsten der Spezialisierungen der std::atomic -Vorlage entfernt: std:: atomic < std:: shared_ptr > und std:: atomic < std:: weak_ptr > . |
(seit C++26) |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
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 2172 | C++11 | expected könnte ein Nullzeiger sein | das Verhalten ist in diesem Fall undefiniert |
| LWG 2980 | C++11 |
leere
shared_ptr
s waren niemals äquivalent
|
äquivalent wenn sie denselben Zeigerwert speichern |
Siehe auch
|
(C++11)
|
prüft, ob die Operationen des atomaren Typs sperrfrei sind
(Funktions-Template) |
|
(C++11)
(C++11)
|
ersetzt atomar den Wert des atomaren Objekts mit einem nicht-atomaren Argument
(Funktions-Template) |
|
(C++11)
(C++11)
|
liest atomar den in einem atomaren Objekt gespeicherten Wert
(Funktions-Template) |
|
(C++11)
(C++11)
|
ersetzt atomar den Wert des atomaren Objekts mit einem nicht-atomaren Argument und gibt den alten Wert des atomaren Objekts zurück
(Funktions-Template) |
|
vergleicht atomar den Wert des atomaren Objekts mit einem nicht-atomaren Argument und führt bei Gleichheit einen atomaren Austausch durch, andernfalls einen atomaren Ladevorgang
(Funktions-Template) |