std:: atomic_wait, std:: atomic_wait_explicit
|
ヘッダーで定義
<atomic>
|
||
|
template
<
class
T
>
void
atomic_wait
(
const
std::
atomic
<
T
>
*
object,
|
(1) | (C++20以降) |
|
template
<
class
T
>
void
atomic_wait
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(2) | (C++20以降) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
std::
atomic
<
T
>
*
object,
|
(3) | (C++20以降) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(4) | (C++20以降) |
アトミックな待機操作を実行します。以下の手順を繰り返し実行するかのように動作します:
-
値表現
を比較する:
object
-
>
load
(
)
(オーバーロード
(1,2)
の場合) または
object
-
>
load
(
order
)
(オーバーロード
(3,4)
の場合) と
old
の値表現を比較する。
- ビット単位で等しい場合、 * object が std::atomic::notify_one() または std::atomic::notify_all() によって通知されるか、スレッドが偽起床するまでブロックする。
- それ以外の場合、直ちに戻る。
これらの関数は、基盤となる実装が偽の解除を起こした場合でも、値が実際に変更された場合にのみ戻ることが保証されています。
目次 |
パラメータ
| object | - | チェックおよび待機対象のアトミックオブジェクトへのポインタ |
| old | - | アトミックオブジェクトが保持していないことを確認する値 |
| order | - | メモリ同期順序 |
戻り値
(なし)
注記
この形式の変更検出は、単純なポーリングや純粋なスピンロックよりも効率的な場合が多いです。
ABA問題 のため、 old から別の値へ一時的に変化し、再び old に戻る変更が見逃され、ブロック解除が行われない可能性があります。
比較はビット単位で行われます( std::memcmp と同様)。比較演算子は使用されません。オブジェクトの値表現に決して関与しないパディングビットは無視されます。
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
(C++20)
|
通知されるまでスレッドをブロックし、アトミック値が変更されるのを待機する
(
std::atomic<T>
の公開メンバ関数)
|
|
(C++20)
|
アトミックオブジェクトを待機している少なくとも1つのスレッドに通知する
(
std::atomic<T>
の公開メンバ関数)
|
|
(C++20)
|
アトミックオブジェクトを待機している全てのスレッドに通知する
(
std::atomic<T>
の公開メンバ関数)
|
|
(C++20)
|
atomic_waitでブロックされているスレッドに通知する
(関数テンプレート) |
|
(C++20)
|
atomic_waitでブロックされている全てのスレッドに通知する
(関数テンプレート) |