4.2 KiB
[saferecl.rcu.domain.func]
32 Concurrency support library [thread]
32.11 Safe reclamation [saferecl]
32.11.2 Read-copy update (RCU) [saferecl.rcu]
32.11.2.4 Class rcu_domain [saferecl.rcu.domain]
32.11.2.4.3 Non-member functions [saferecl.rcu.domain.func]
rcu_domain& rcu_default_domain() noexcept;
Returns: A reference to a static-duration object of type rcu_domain.
A reference to the same object is returned every time this function is called.
void rcu_synchronize(rcu_domain& dom = rcu_default_domain()) noexcept;
Effects: If the call to rcu_synchronize does not strongly happen before the lock opening an RCU protection region R on dom, blocks until the unlock closing R happens.
Synchronization: The unlock closing R strongly happens before the return from rcu_synchronize.
void rcu_barrier(rcu_domain& dom = rcu_default_domain()) noexcept;
Effects: May evaluate any scheduled evaluations in dom.
For any evaluation that happens before the call to rcu_barrier and that schedules an evaluation E in dom, blocks until E has been evaluated.
Synchronization: The evaluation of any such E strongly happens before the return from rcu_barrier.
[Note 1:
A call to rcu_barrier does not imply a call to rcu_synchronize and vice versa.
â end note]
template<class T, class D = default_delete<T>> void rcu_retire(T* p, D d = D(), rcu_domain& dom = rcu_default_domain());
Mandates: is_move_constructible_v is true and the expression d(p) is well-formed.
Preconditions: D meets the Cpp17MoveConstructible andCpp17Destructible requirements.
Effects: May allocate memory.
It is unspecified whether the memory allocation is performed by invoking operator new.
Initializes an object d1 of type D from std::move(d).
Schedules the evaluation of d1(p) in the domain dom; the behavior is undefined if that evaluation exits via an exception.
May invoke scheduled evaluations in dom.
[Note 2:
If rcu_retire exits via an exception, no evaluation is scheduled.
â end note]
Throws: bad_alloc or any exception thrown by the initialization of d1.
[Note 3:
If scheduled evaluations acquire resources held across any invocation of rcu_retire on dom, deadlock can occur.
â end note]