From c7a7c9dcbeaf0bc60ea3c752269d693323a7db97 Mon Sep 17 00:00:00 2001 From: yoh Date: Thu, 6 Feb 2025 10:48:43 +0900 Subject: [PATCH] =?UTF-8?q?rcu:=20=E5=BE=AE=E8=AA=BF=E6=95=B4=20(#1183)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GLOBAL_QUALIFY_LIST.txt | 1 + reference/rcu.md | 2 +- reference/rcu/rcu_obj_base.md | 5 ++++- reference/rcu/rcu_obj_base/retire.md | 10 +++++++--- reference/rcu/rcu_retire.md | 5 ++++- reference/rcu/rcu_synchronize.md | 3 +++ 6 files changed, 20 insertions(+), 6 deletions(-) diff --git a/GLOBAL_QUALIFY_LIST.txt b/GLOBAL_QUALIFY_LIST.txt index 0b25cda200..19e1e5d88a 100644 --- a/GLOBAL_QUALIFY_LIST.txt +++ b/GLOBAL_QUALIFY_LIST.txt @@ -228,6 +228,7 @@ * view[link /reference/ranges/view.md] * viewable_range[link /reference/ranges/viewable_range.md] * [link /reference/ratio.md] +* [link /reference/rcu.md] * [link /reference/regex.md] * [link /reference/scoped_allocator.md] * [link /reference/semaphore.md] diff --git a/reference/rcu.md b/reference/rcu.md index 1268415d35..6801cb76ab 100644 --- a/reference/rcu.md +++ b/reference/rcu.md @@ -4,7 +4,7 @@ ``ヘッダでは、並行なデータの参照・更新を実現する[Read-Copy Update(RCU)機構](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%BC%E3%83%89%E3%83%BB%E3%82%B3%E3%83%94%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88)のための部品を定義する。 -RCU同期メカニズムは、複数スレッド間で共有されるデータが高頻度で参照され、稀に更新されるようなユースケースに適している。RCU機構はスレッド間の排他制御を行わず、更新操作により不要となった古いデータを安全に解放するタイミング制御を行う。 +RCU同期メカニズムは、複数スレッド間で共有されるリンク方式データ構造が高頻度で参照され、稀に更新されるようなユースケースに適している。RCU機構のデータ読み取りではスレッド間の排他制御を行わず、更新操作により不要となった古いデータを安全に回収(メモリ解放)するタイミングを制御する。 | 名前 | 説明 | 対応バージョン | diff --git a/reference/rcu/rcu_obj_base.md b/reference/rcu/rcu_obj_base.md index c5b30d33c9..3a36d3ebc9 100644 --- a/reference/rcu/rcu_obj_base.md +++ b/reference/rcu/rcu_obj_base.md @@ -85,8 +85,11 @@ int main() ``` * std::rcu_obj_base[color ff0000] * std::rcu_default_domain[link rcu_default_domain.md] +* retire()[link rcu_obj_base/retire.md] * std::scoped_lock[link /reference/mutex/scoped_lock.md] - +* std::jthread[link /reference/thread/jthread.md] +* exchange[link /reference/atomic/atomic/exchange.md] +* store[link /reference/atomic/atomic/store.md] ### 出力例 ``` diff --git a/reference/rcu/rcu_obj_base/retire.md b/reference/rcu/rcu_obj_base/retire.md index 8c04fcde77..2a8e7edc39 100644 --- a/reference/rcu/rcu_obj_base/retire.md +++ b/reference/rcu/rcu_obj_base/retire.md @@ -17,7 +17,11 @@ RCU機構により保護されるオブジェクト回収をスケジュール ## 適格要件 -クラステンプレートパラメータ`T`がRCU保護可能(rcu-protectable)な型であること。 +クラステンプレートパラメータ`T`が、下記条件を満たすRCU保護可能(rcu-protectable)な型であること。 + +- `rcu_obj_base`型を唯一の基底クラスとして持つクラス型であり、かつ +- その基底は公開(public)かつ非仮想基底クラスであり、かつ +- 型`X`, `Y`の他の組合せに対して`rcu_obj_base`型を基底クラスとして持たない。 ## 事前条件 @@ -27,8 +31,8 @@ RCU機構により保護されるオブジェクト回収をスケジュール ## 効果 -- `deleter = std::move(d)`を評価し、 -- RCUドメイン`dom`に対して式`deleter(addressof(x))`の評価をスケジュールする。 +- `deleter =` [`std::move`](/reference/utility/move.md)`(d)`を評価し、 +- RCUドメイン`dom`に対して式`deleter(`[`addressof`](/reference/memory/addressof.md)`(x))`の評価をスケジュールする。 - 評価が例外で終了した場合は未定義の動作を引き起こす。 - `dom`に対してスケジュールされた評価を呼び出す可能性がある。 diff --git a/reference/rcu/rcu_retire.md b/reference/rcu/rcu_retire.md index 469ac230f4..d4d63c3743 100644 --- a/reference/rcu/rcu_retire.md +++ b/reference/rcu/rcu_retire.md @@ -31,7 +31,7 @@ RCU機構により保護されるオブジェクト回収をスケジュール ## 効果 - メモリを確保する可能性がある。 - メモリ確保が`operator new`を呼び出すか否かは未規定である。 -- `D`型のオブジェクト`d1`を`std::move(d)`で初期化する。 +- `D`型のオブジェクト`d1`を[`std::move`](/reference/utility/move.md)`(d)`で初期化する。 - RCUドメイン`dom`に対して式`d1(p)`の評価をスケジュールする。 - 評価が例外で終了した場合は未定義の動作を引き起こす。 - `dom`に対してスケジュールされた評価を呼び出す可能性がある。 @@ -97,6 +97,9 @@ int main() * std::rcu_retire[color ff0000] * std::rcu_default_domain[link rcu_default_domain.md] * std::scoped_lock[link /reference/mutex/scoped_lock.md] +* std::jthread[link /reference/thread/jthread.md] +* exchange[link /reference/atomic/atomic/exchange.md] +* store[link /reference/atomic/atomic/store.md] ### 出力例 ``` diff --git a/reference/rcu/rcu_synchronize.md b/reference/rcu/rcu_synchronize.md index b86626adac..713b6ab02d 100644 --- a/reference/rcu/rcu_synchronize.md +++ b/reference/rcu/rcu_synchronize.md @@ -88,6 +88,9 @@ int main() * std::rcu_synchronize[color ff0000] * std::rcu_default_domain[link rcu_default_domain.md] * std::scoped_lock[link /reference/mutex/scoped_lock.md] +* std::jthread[link /reference/thread/jthread.md] +* exchange[link /reference/atomic/atomic/exchange.md] +* store[link /reference/atomic/atomic/store.md] ### 出力例 ```