std:: atomic_... <std::shared_ptr>
|
定義済みヘッダー
<memory>
|
||
|
template
<
class
T
>
bool atomic_is_lock_free ( const std:: shared_ptr < T > * p ) ; |
(1) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
std:: shared_ptr < T > atomic_load ( const std:: shared_ptr < T > * p ) ; |
(2) |
(C++11で追加)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_load_explicit
|
(3) |
(C++11で追加)
(C++20で非推奨) (C++26で削除予定) |
|
template
<
class
T
>
void atomic_store ( std:: shared_ptr < T > * p, std:: shared_ptr < T > r ) ; |
(4) |
(C++11で追加)
(C++20で非推奨) (C++26で削除予定) |
|
template
<
class
T
>
void
atomic_store_explicit
|
(5) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange
|
(6) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange_explicit
|
(7) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak
|
(8) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong
|
(9) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong_explicit
|
(10) |
(C++11以降)
(C++20で非推奨) (C++26で削除) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak_explicit
|
(11) |
(C++11で導入)
(C++20で非推奨) (C++26で削除) |
同期なしで同じ
std::shared_ptr
オブジェクトに複数の実行スレッドがアクセスし、そのいずれかのアクセスが
shared_ptr
の非constメンバ関数を使用する場合、データ競合が発生します。ただし、すべてのそのようなアクセスが対応するアトミックアクセス関数(
std::atomic_load
、
std::atomic_store
など)のオーバーロードであるこれらの関数を通じて実行される場合は除きます。
shared_ptr
の制御ブロックはスレッドセーフであることに注意してください:異なる
std::shared_ptr
オブジェクトは、変更操作(例えば
operator
=
や
reset
など)を使用して、複数のスレッドによって同時にアクセスすることが可能です。これは、これらのインスタンスがコピーであり、内部的に同じ制御ブロックを共有している場合でも同様です。
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
- 等価である場合(同じポインタ値を格納し、同じオブジェクトの所有権を共有しているか、両方とも空である場合)、 success で指定されたメモリ順序制約を使用して * p に desired を代入し、 true を返す。
- 等価でない場合、 failure で指定されたメモリ順序制約を使用して * expected に * p を代入し、 false を返す。
atomic_compare_exchange_weak_explicit
は偽の失敗を起こす可能性があります。
p がヌルポインタの場合、これらの関数の動作はすべて未定義です。
目次 |
パラメータ
| p, expected | - | std::shared_ptr へのポインタ |
| r, desired | - | std::shared_ptr |
| mo, success, failure | - | std::memory_order 型のメモリ順序指定子 |
例外
これらの関数は例外をスローしません。
戻り値
注記
これらの関数は通常、ミューテックスを使用して実装され、ポインタ値をキーとして使用するグローバルハッシュテーブルに格納されます。
Concurrency TS
は、これらの関数の使用に代わるものとして、アトミックスマートポインタクラス
atomic_shared_ptr
および
atomic_weak_ptr
を提供します。
|
これらの関数は以下の特殊化を推奨して非推奨となりました: std::atomic テンプレート: std:: atomic < std:: shared_ptr > および std:: atomic < std:: weak_ptr > 。 |
(C++20以降)
(C++26まで) |
|
これらの関数は以下の特殊化を推奨して削除されました: std::atomic テンプレート: std:: atomic < std:: shared_ptr < および std:: atomic < std:: weak_ptr > 。 |
(C++26以降) |
例
|
このセクションは不完全です
理由: 例がありません |
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2172 | C++11 | expected がヌルポインタになる可能性があった | この場合の動作は未定義 |
| LWG 2980 | C++11 |
空の
shared_ptr
は常に等価ではなかった
|
同じポインタ値を格納している場合は等価 |
関連項目
|
(C++11)
|
アトミック型の操作がロックフリーかどうかをチェックする
(関数テンプレート) |
|
(C++11)
(C++11)
|
アトミックオブジェクトの値を非アトミックな引数でアトミックに置き換える
(関数テンプレート) |
|
(C++11)
(C++11)
|
アトミックオブジェクトに格納された値をアトミックに取得する
(関数テンプレート) |
|
(C++11)
(C++11)
|
アトミックオブジェクトの値を非アトミックな引数でアトミックに置き換え、アトミックオブジェクトの古い値を返す
(関数テンプレート) |
|
アトミックオブジェクトの値を非アトミックな引数とアトミックに比較し、等しい場合はアトミック交換を、等しくない場合はアトミックロードを実行する
(関数テンプレート) |