std::atomic_flag:: wait
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
(C++20)
|
||||
|
atomic_flag::wait
(C++20)
|
||||
|
(C++20)
|
||||
|
(C++20)
|
|
void
wait
(
bool
old,
std::
memory_order
order
=
std:: memory_order_seq_cst ) const noexcept ; |
(1) |
(seit C++20)
(constexpr seit C++26) |
|
void
wait
(
bool
old,
std::
memory_order
order
=
|
(2) | (seit C++20) |
Führt atomare Warteoperationen aus. Verhält sich so, als würden wiederholt die folgenden Schritte ausgeführt:
-
Vergleiche
this
-
>
test
(
order
)
mit dem 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, auf den das
atomic_flag
-Objekt nicht mehr enthalten soll
|
| order | - | die durchzusetzenden Speicherreihenfolge-Beschränkungen |
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.
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
(C++20)
|
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion) |
|
(C++20)
|
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion) |
|
(C++20)
|
benachrichtigt einen in atomic_flag_wait blockierten Thread
(Funktion) |
|
(C++20)
|
benachrichtigt alle in atomic_flag_wait blockierten Threads
(Funktion) |