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.