Register an object for reclamation. Reclamation may happen on a background
thread, or on a thread that explicitly invokes jss::rcu_barrier
or jss::rcu_synchronize
.
namespace jss { template<typename T,typename Deleter = std::default_delete> void rcu_retire(T* p,Deleter d={}); }
#include <jss/rcu.hpp>
Deleter
must be
MoveConstructible
.
Move-constructs the deleter d
into internal storage D
.
Registers p
for reclamation
by the invocation of D(p)
. Reclamation will occur on an unspecified
thread created by the implementation, or a thread that invokes jss::rcu_barrier
or jss::rcu_synchronize
.
std::bad_alloc
if sufficient internal
storage could not be allocated. Any exception thrown by the move-construction
of d
.
If this invocation of jss::rcu_retire
happens-before
an invocation of jss::rcu_barrier
or jss::rcu_synchronize
, the completion
of the reclamation happens-before the completion
of that invocation of jss::rcu_barrier
or jss::rcu_synchronize
.