namespace std {
template <class T>
void
atomic_store_min(volatile atomic<T>* object,
typename atomic<T>::value_type operand) noexcept; // (1) C++26
template <class T>
constexpr void
atomic_store_min(atomic<T>* object,
typename atomic<T>::value_type operand) noexcept; // (2) C++26
}
概要
値を読み込まずにアトミックに最小値を設定する。
この関数は、atomic_fetch_min()と異なり、現在の (古い) 値を読み込むことなく現在の値に演算を行うため、高速に動作する。ただし変更前の古い値は戻り値として取得できない。
テンプレートパラメータ制約
- (1), (2) : 型
Tがオブジェクト型であること。型Tがvoid*や関数ポインタであってはならない - (1) :
atomic<T>::is_always_lock_freeがtrueであること
事前条件
orderは、以下のいずれかであること
効果
memory_order_seq_cstのメモリオーダーにしたがって、std::min()アルゴリズムのように*objectが保持する値とoperandの最小値を求めて、その値でアトミックに置き換える
戻り値
なし
例外
投げない
例
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> x(3);
std::atomic_store_min(&x, 2);
std::cout << x.load() << std::endl;
}
出力
2
バージョン
言語
- C++26
処理系
- Clang: 21 ❌
- GCC: 15 ❌
- Visual C++: 2022 Update 13 ❌