proxygen
folly::CoreCachedSharedPtr< T, kNumSlots > Class Template Reference

#include <CoreCachedSharedPtr.h>

Public Member Functions

 CoreCachedSharedPtr (const std::shared_ptr< T > &p=nullptr)
 
void reset (const std::shared_ptr< T > &p=nullptr)
 
std::shared_ptr< Tget () const
 

Private Types

using Holder = std::shared_ptr< T >
 

Private Attributes

std::array< std::shared_ptr< T >, kNumSlots > slots_
 

Friends

template<class , size_t >
class CoreCachedWeakPtr
 

Detailed Description

template<class T, size_t kNumSlots = 64>
class folly::CoreCachedSharedPtr< T, kNumSlots >

This class creates core-local caches for a given shared_ptr, to mitigate contention when acquiring/releasing it.

It has the same thread-safety guarantees as shared_ptr: it is safe to concurrently call get(), but reset()s must be synchronized with reads and other resets().

Author
Giuseppe Ottaviano ott@f.nosp@m.b.co.nosp@m.m

Definition at line 40 of file CoreCachedSharedPtr.h.

Member Typedef Documentation

template<class T, size_t kNumSlots = 64>
using folly::CoreCachedSharedPtr< T, kNumSlots >::Holder = std::shared_ptr<T>
private

Definition at line 62 of file CoreCachedSharedPtr.h.

Constructor & Destructor Documentation

template<class T, size_t kNumSlots = 64>
folly::CoreCachedSharedPtr< T, kNumSlots >::CoreCachedSharedPtr ( const std::shared_ptr< T > &  p = nullptr)
inlineexplicit

Definition at line 42 of file CoreCachedSharedPtr.h.

References folly::CoreCachedSharedPtr< T, kNumSlots >::reset().

42  {
43  reset(p);
44  }
void reset(const std::shared_ptr< T > &p=nullptr)

Member Function Documentation

template<class T, size_t kNumSlots = 64>
std::shared_ptr<T> folly::CoreCachedSharedPtr< T, kNumSlots >::get ( ) const
inline

Definition at line 57 of file CoreCachedSharedPtr.h.

References folly::AccessSpreader< Atom >::current(), and folly::CoreCachedSharedPtr< T, kNumSlots >::slots_.

57  {
58  return slots_[AccessSpreader<>::current(kNumSlots)];
59  }
std::array< std::shared_ptr< T >, kNumSlots > slots_
static size_t current(size_t numStripes)
template<class T, size_t kNumSlots = 64>
void folly::CoreCachedSharedPtr< T, kNumSlots >::reset ( const std::shared_ptr< T > &  p = nullptr)
inline

Definition at line 46 of file CoreCachedSharedPtr.h.

References folly::enumerate(), and folly::CoreCachedSharedPtr< T, kNumSlots >::slots_.

Referenced by folly::AtomicCoreCachedSharedPtr< T, kNumSlots >::AtomicCoreCachedSharedPtr(), and folly::CoreCachedSharedPtr< T, kNumSlots >::CoreCachedSharedPtr().

46  {
47  // Allocate each Holder in a different CoreRawAllocator stripe to
48  // prevent false sharing. Their control blocks will be adjacent
49  // thanks to allocate_shared().
50  for (auto slot : folly::enumerate(slots_)) {
51  auto alloc = getCoreAllocator<Holder, kNumSlots>(slot.index);
52  auto holder = std::allocate_shared<Holder>(alloc, p);
53  *slot = std::shared_ptr<T>(holder, p.get());
54  }
55  }
std::array< std::shared_ptr< T >, kNumSlots > slots_
detail::RangeEnumerator< Range > enumerate(Range &&r)
Definition: Enumerate.h:167

Friends And Related Function Documentation

template<class T, size_t kNumSlots = 64>
template<class , size_t >
friend class CoreCachedWeakPtr
friend

Definition at line 65 of file CoreCachedSharedPtr.h.

Member Data Documentation


The documentation for this class was generated from the following file: