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 Warteoperationen aus.
Vergleicht object - > test ( std:: memory_order_seq_cst ) oder object - > test ( order ) mit old , und wenn sie gleich sind, blockiert es bis * object durch std::atomic_flag::notify_one() oder std::atomic_flag::notify_all() benachrichtigt wird (oder der Thread spurios entblockt wird). Dies wird wiederholt, bis die Werte ungleich verglichen werden.
Diese Funktionen garantieren, dass sie nur zurückkehren, wenn sich der Wert geändert hat, selbst wenn die zugrundeliegende Implementierung fälschlicherweise entblockt.
Inhaltsverzeichnis |
Parameter
| object | - | Zeiger auf das atomare Flag, das geprüft und auf das gewartet werden soll |
| old | - | der Wert, auf dessen Abwesenheit im atomaren Flag geprüft wird |
| order | - | die Speichersynchronisierungsreihenfolge |
Rückgabewert
(keine)
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 von
std::atomic_flag
)
|
|
(C++20)
|
benachrichtigt alle auf das atomare Objekt blockiert wartenden Threads
(öffentliche Elementfunktion von
std::atomic_flag
)
|
|
(C++20)
|
benachrichtigt einen in atomic_flag_wait blockierten Thread
(Funktion) |
|
(C++20)
|
benachrichtigt alle in atomic_flag_wait blockierten Threads
(Funktion) |