最終更新日時:
が更新

履歴 編集

function
<hazard_pointer>

std::hazard_pointer::try_protect(C++26)

template <class T>
bool try_protect(T*& ptr, const atomic<T*>& src) noexcept;

概要

ptrが指すオブジェクトをこのハザードポインタで保護してよいか試み、その後のsrcの値と一致しているかを確認する。

protect()メンバ関数は内部でこの関数を成功するまで繰り返し呼び出す。ロックフリーなアルゴリズムで、保護の設定と再確認を1ステップで行いたい場合に使用する。

テンプレートパラメータ制約

  • Tはハザードポインタで保護可能 (hazard-protectable) な型であること。

事前条件

  • *thisが空でないこと。

効果

以下の手順を順に実行する:

  1. T*の変数oldptrの値で初期化する。
  2. reset_protection(old)を評価する。
  3. src.load(memory_order::acquire)の値をptrへ代入する。
  4. old == ptrfalseの場合、reset_protection()を評価する。

戻り値

old == ptr。すなわち、保護しようとしたポインタが、保護後のsrcの値と一致していればtrue

例外

投げない

備考

  • 戻り値falseの場合、ptrにはsrcの新しい値が格納されているので、再度この関数を呼び出して保護を試みることができる。

バージョン

言語

  • C++26

処理系

関連項目

参照