std::atomic_flag_wait, std::atomic_flag_wait_explicit
| Definiert in Header <atomic> |
||
| void atomic_flag_wait( const atomic_flag* object, bool old ) noexcept; |
(1) | (seit C++20) |
| void atomic_flag_wait( const volatile atomic_flag* object, bool old ) noexcept; |
(2) | (seit C++20) |
| void atomic_flag_wait_explicit( const atomic_flag* object, bool old, std::memory_order order ) noexcept; |
(3) | (seit C++20) |
| void atomic_flag_wait_explicit( const volatile atomic_flag* object, bool old, std::memory_order order ) noexcept; |
(4) | (seit C++20) |
Führt atomare Wartevorgänge durch.
Vergleicht object->test(std::memory_order_seq_cst) oder object->test(order) mit old, und wenn sie gleich sind, blockiert er, bis *object durch std::atomic_flag::notify_one() oder std::atomic_flag::notify_all() benachrichtigt wird (oder der Thread fälschlicherweise unblockiert wird). Dies wird wiederholt, bis die Werte ungleich sind.
Diese Funktionen geben garantiert nur zurück, wenn sich der Wert geändert hat, auch wenn die zugrunde liegende Implementierung fälschlicherweise entblockiert.
Inhalt |
[edit] Parameter
| Objekt | - | Zeiger auf das atomare Flag, das überprüft und auf das gewartet werden soll |
| old | - | Der Wert, auf den das atomare Flag nicht mehr gesetzt sein soll |
| Reihenfolge | - | die Speicher-Synchronisationsreihenfolge |
[edit] Rückgabewert
(keine)
[edit] Hinweise
Diese Form der Änderungsdetektion ist oft effizienter als einfaches Polling oder reine Spinlocks.
Aufgrund des ABA-Problems können transiente Änderungen von old zu einem anderen Wert und zurück zu old möglicherweise übersehen werden und nicht zu einer Entsperrung führen.
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| (C++20) |
benachrichtigt mindestens einen Thread, der auf das atomare Objekt wartet (public member function of std::atomic_flag) |
| (C++20) |
benachrichtigt alle Threads, die auf das atomare Objekt warten (public member function of std::atomic_flag) |
| (C++20) |
benachrichtigt einen Thread, der in atomic_flag_wait blockiert ist (Funktion) |
| (C++20) |
benachrichtigt alle Threads, die in atomic_flag_wait blockiert sind (Funktion) |