286 template <
typename Tag = RcuTag>
303 template <
typename Tag>
310 template <
typename Tag>
340 template <typename
T>
347 void synchronize() noexcept;
354 std::atomic<uint64_t> work_{0};
363 static constexpr
uint64_t syncTimePeriod_{1600 * 2 };
364 std::atomic<uint64_t> syncTime_{0};
380 void half_sync(
bool blocking,
list_head& cbs);
390 template <
typename Tag = RcuTag>
395 :
epoch_(domain->lock_shared()), domain_(domain) {}
426 DCHECK(!
epoch_.has_value());
427 epoch_ = domain_->lock_shared();
431 DCHECK(
epoch_.has_value());
442 template <
typename Tag = RcuTag>
449 template <
typename Tag = RcuTag>
452 domain->synchronize();
455 template <
typename Tag = RcuTag>
458 domain->synchronize();
464 typename D = std::default_delete<T>,
465 typename Tag = RcuTag>
477 typename D = std::default_delete<T>,
478 typename Tag = RcuTag>
484 this->
cb_ = [
this, d =
std::move(d)]() { d(static_cast<T*>(
this)); };
Optional< rcu_token > epoch_
FOLLY_ALWAYS_INLINE void unlock() noexcept
FOLLY_ALWAYS_INLINE void lock() noexcept
#define FOLLY_ALWAYS_INLINE
void swap(rcu_reader_domain< Tag > &a, rcu_reader_domain< Tag > &b) noexcept
typename detail::ThreadCachedLists< folly::detail::Tag >::ListHead list_head
void swap(rcu_reader_domain &other) noexcept
FOLLY_ALWAYS_INLINE rcu_reader_domain(rcu_domain< Tag > *domain=rcu_default_domain()) noexcept
constexpr detail::Map< Move > move
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
rcu_reader_domain(rcu_reader_domain &&other) noexcept
folly::Indestructible< rcu_domain< RcuTag > * > rcu_default_domain_
rcu_reader_domain(std::defer_lock_t, rcu_domain< Tag > *domain=rcu_default_domain()) noexcept
rcu_domain< Tag > * domain_
std::unique_ptr< AsyncFizzServer::HandshakeCallback > cb_
FOLLY_ALWAYS_INLINE ~rcu_reader_domain() noexcept
void rcu_retire(T *p, D d={}, rcu_domain< Tag > *domain=rcu_default_domain())
detail::TurnSequencer< std::atomic > turn_
rcu_domain< RcuTag > * rcu_default_domain()
rcu_reader_domain & operator=(rcu_reader_domain &&other) noexcept
void rcu_barrier(rcu_domain< Tag > *domain=rcu_default_domain()) noexcept
void swap(exception_wrapper &a, exception_wrapper &b) noexcept
detail::ThreadCachedLists< Tag > q_
rcu_token & operator=(const rcu_token &other)=delete
T exchange(T &obj, U &&new_value)
rcu_token(uint64_t epoch)
typename detail::ThreadCachedLists< folly::detail::Tag >::Node list_node
void retire(D d={}, rcu_domain< Tag > *domain=rcu_default_domain())
void synchronize_rcu(rcu_domain< Tag > *domain=rcu_default_domain()) noexcept
Future< bool > call(int depth, Executor *executor)
void retire(list_node *node) noexcept