Namespaces
Variants

std::experimental::atomic_weak_ptr<T>:: compare_exchange_strong, std::experimental::atomic_weak_ptr<T>:: compare_exchange_weak

From cppreference.net
HTMLタグ、属性、C++固有の用語、コードブロック内のテキストは翻訳せず、元のフォーマットを保持しています。 HTMLタグ、属性、コード内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しました。 **日本語訳:** **注記:** このC++関数宣言には翻訳すべき自然言語テキストが含まれていないため、HTMLタグ、属性、C++コードはすべて原文のまま保持されています。C++のキーワード(`bool`、`compare_exchange_weak`、`std::weak_ptr`、`const`、`std::memory_order`、`std::memory_order_seq_cst`、`noexcept`など)はすべて翻訳対象外です。 **翻訳結果:** **注記:** このコードはC++の関数宣言であり、以下の要素が含まれています: - HTMLタグと属性はそのまま保持 - ` `内のC++コードは翻訳対象外 - C++固有の用語(`compare_exchange_weak`, `weak_ptr`, `memory_order`など)は翻訳せず - 数値の(4)はそのまま保持 翻訳すべき自然言語のテキストが含まれていないため、元のコードをそのまま出力しています。 **日本語訳:** **注記:** 指定された要件に従い、HTMLタグ、属性、コードブロック内のテキスト、C++固有の用語(`compare_exchange_strong`、`weak_ptr`、`memory_order`、`noexcept`など)は翻訳せず、元のフォーマットを保持しています。 **注記**: このC++コードは技術的な内容であり、HTMLタグ、属性、コード内のテキストは翻訳対象外と指定されています。関数名、型名、キーワードなどのC++固有の用語は原文のまま保持されています。 (注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造を保持したまま出力します)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, const std:: weak_ptr < T > & desired,
std:: memory_order success, std:: memory_order failure ) noexcept ;
(1)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order success, std:: memory_order failure ) noexcept ;
(2)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, const std:: weak_ptr < T > & desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(3)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, const std:: weak_ptr < T > & desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(3)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(4)
bool compare_exchange_weak ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(4)
bool compare_exchange_strong ( std:: weak_ptr < T > & expected, const std:: weak_ptr < T > & desired,
std:: memory_order success, std:: memory_order failure ) noexcept ;
(5)
bool compare_exchange_strong ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order success, std:: memory_order failure ) noexcept ;
(6)
bool compare_exchange_strong ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order success, std:: memory_order failure ) noexcept ;
(6)
bool compare_exchange_strong ( std:: weak_ptr < T > & expected, const std:: weak_ptr < T > & desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(7)
bool compare_exchange_strong ( std:: weak_ptr < T > & expected, std:: weak_ptr < T > && desired,
std:: memory_order order = std:: memory_order_seq_cst ) noexcept ;
(8)

基にある weak_ptr * this expected でアトミックに比較し、等価である場合、前者を desired で置き換えます(読み込み-修正-書き込み操作を実行)。それ以外の場合、 * this に格納されている実際の値を expected に読み込みます(読み込み操作を実行)。置き換えは、 weak_ptr のコピー代入演算子またはムーブ代入演算子によって適切に行われます。

2つの weak_ptr は、同じポインタ値を格納し、所有権を共有する場合にのみ等価です。

読み込み-変更-書き込み操作とロード操作のメモリモデルは、それぞれ success および failure です。オーバーロード (3,4,7,8) の場合、 order は読み込み-変更-書き込み操作とロード操作の両方に使用されます。ただし、 order == std:: memory_order_acq_rel の場合、または order == std:: memory_order_release の場合、それぞれ std::memory_order_acquire および std::memory_order_relaxed がロード操作に使用されます。

弱いバージョン (1-4) は偽の失敗を起こす可能性があります。

目次

パラメータ

expected - アトミックオブジェクト内に存在することが期待される値への参照
desired - 期待値と一致した場合にアトミックオブジェクトに格納する値
success - 比較が成功した場合の読み込み-変更-書き込み操作のメモリ同期順序。すべての値が許可される
failure - 比較が失敗した場合のロード操作のメモリ同期順序。 std::memory_order_release または std::memory_order_acq_rel を指定できず、 success よりも強い順序付けを指定できない
order - 両方の操作に対するメモリ同期順序

戻り値

true 基盤となるアトミック値が変更された場合、 false それ以外の場合。

備考

atomic_weak_ptr オブジェクト自体へのすべての変更、および関連する use_count の増加は、アトミックに実行されることが保証されています。関連する use_count の減少はアトミック操作の後に発生しますが、その操作の一部である必要はありません。関連する破棄または解放操作はすべて、アトミック操作の後に発生し、その操作の一部ではありません。

compare-exchange操作が true を返す場合、 expected はアトミック更新ステップの後にアクセスされません。操作が false を返す場合、 expected はアトミック更新の試行中に atomic_weak_ptr オブジェクトから読み取られた既存の値で更新されます。 expected への書き込みに対応する use_count の更新はアトミック操作の一部ですが、 expected 自体への書き込みはアトミック操作の一部である必要はありません。

オーバーロード (1,3,5,7) では、 desired はアトミック更新ステップの後にアクセスされません。

オーバーロード (2,4,6,8) の場合、 desired は、比較交換操作が true を返した場合にのみムーブされる。このムーブはアトミックな更新ステップの後に行われる。

注記

弱い形式 (1-4) の関数は、偽の失敗を起こすことが許可されています。つまり、 * this expected が実際には等価である場合でも、等価でないかのように動作することがあります。compare-and-exchange操作がループ内で行われる場合、弱いバージョンは一部のプラットフォームでより優れたパフォーマンスをもたらします。

関連項目

std::shared_ptr に対するアトミック操作を特殊化
(関数テンプレート)