std:: atomic_wait, std:: atomic_wait_explicit
|
Definiert in Header
<atomic>
|
||
|
template
<
class
T
>
void
atomic_wait
(
const
std::
atomic
<
T
>
*
object,
|
(1) | (seit C++20) |
|
template
<
class
T
>
void
atomic_wait
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(2) | (seit C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
std::
atomic
<
T
>
*
object,
|
(3) | (seit C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(4) | (seit C++20) |
Führt atomare Warteoperationen aus. Verhält sich so, als würden wiederholt die folgenden Schritte ausgeführt:
-
Vergleiche die
Wertdarstellung
von
object
-
>
load
(
)
(für Überladungen
(1,2)
) oder
object
-
>
load
(
order
)
(für Überladungen
(3,4)
) mit der von
old
.
- Wenn diese bitweise gleich sind, blockiert bis * object durch std::atomic::notify_one() oder std::atomic::notify_all() benachrichtigt wird, oder der Thread spurious entblockt wird.
- Andernfalls, kehrt zurück.
Diese Funktionen garantieren, dass sie nur zurückkehren, wenn sich der Wert geändert hat, selbst wenn die zugrunde liegende Implementierung fälschlicherweise entblockt.
Inhaltsverzeichnis |
Parameter
| object | - | Zeiger auf das atomare Objekt, das geprüft und auf das gewartet werden soll |
| old | - | der Wert, der prüft, ob das atomare Objekt diesen nicht mehr enthält |
| 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.
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
|
(C++20)
|
blockiert den Thread, bis eine Benachrichtigung erfolgt und der atomare Wert sich ändert
(öffentliche Elementfunktion von
std::atomic<T>
)
|
|
(C++20)
|
benachrichtigt mindestens einen auf das atomare Objekt wartenden Thread
(öffentliche Elementfunktion von
std::atomic<T>
)
|
|
(C++20)
|
benachrichtigt alle auf das atomare Objekt wartenden Threads
(öffentliche Elementfunktion von
std::atomic<T>
)
|
|
(C++20)
|
benachrichtigt einen in atomic_wait blockierten Thread
(Funktionstemplate) |
|
(C++20)
|
benachrichtigt alle in atomic_wait blockierten Threads
(Funktionstemplate) |