std::atomic_ref<T>:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
void
wait
(
value_type old,
std::
memory_order
order
=
std:: memory_order_seq_cst ) const noexcept ; |
(constexpr seit C++26) | |
Führt atomare Warteoperationen aus. Verhält sich so, als würden wiederholt die folgenden Schritte ausgeführt:
-
Vergleiche die
Wertdarstellung
von
this
-
>
load
(
order
)
mit der von
old
.
- Wenn diese gleich sind, blockiert bis * this durch notify_one() oder notify_all() benachrichtigt wird, oder der Thread spurios entblockt wird.
- Andernfalls, kehrt zurück.
Diese Funktionen garantieren, dass sie nur zurückkehren, wenn sich der Wert geändert hat, selbst wenn die zugrundeliegende Implementierung fälschlicherweise entblockt.
Wenn order nicht std:: memory_order_relaxed , std:: memory_order_consume , std:: memory_order_acquire oder std:: memory_order_seq_cst ist, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| old | - |
der Wert, der überprüft werden soll, ob das Objekt des
atomic_ref
diesen nicht mehr enthält
|
| order | - | Speicherreihenfolge-Beschränkungen, die durchgesetzt werden sollen |
Hinweise
Diese Form der Änderungserkennung ist oft effizienter als einfaches Polling oder reine Spinlocks.
Aufgrund des ABA-Problems können vorübergehende Änderungen von old zu einem anderen Wert und zurück zu old übersehen werden und nicht freigegeben werden.
Der Vergleich erfolgt bitweise (ähnlich wie std::memcmp ); es wird kein Vergleichsoperator verwendet. Padding-Bits, die nie an der Wertdarstellung eines Objekts teilnehmen, werden ignoriert.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion) |
|
|
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion) |
|
|
(C++20)
|
benachrichtigt einen in atomic_wait blockierten Thread
(Funktionstemplate) |
|
(C++20)
|
benachrichtigt alle in atomic_wait blockierten Threads
(Funktionstemplate) |