LLDB mainline
lldb_private::SharedLocked< PtrT, Mutex > Class Template Reference

A copyable RAII handle that pairs a pointer-like value with a shared (reader) lock on a caller-supplied mutex. More...

#include <Locked.h>

Inheritance diagram for lldb_private::SharedLocked< PtrT, Mutex >:
[legend]

Public Types

using mutex_type = Mutex
using lock_type = std::shared_lock<Mutex>

Public Member Functions

 SharedLocked ()=default
 SharedLocked (mutex_type &m, PtrT p)
 SharedLocked (lock_type lock, PtrT p)
 SharedLocked (const SharedLocked &)=default
SharedLockedoperator= (const SharedLocked &)=default
 SharedLocked (SharedLocked &&other)
SharedLockedoperator= (SharedLocked &&other)
Public Member Functions inherited from lldb_private::detail::LockedAccessors< SharedLocked< PtrT, llvm::sys::RWMutex >, PtrT >
auto operator-> () const
decltype(auto) operator* () const
auto get () const
 operator bool () const

Private Attributes

std::shared_ptr< lock_typem_lock
PtrT m_ptr {}

Static Private Attributes

static constexpr bool PointeeIsConst

Friends

class detail::LockedAccessors< SharedLocked< PtrT, Mutex >, PtrT >

Detailed Description

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
class lldb_private::SharedLocked< PtrT, Mutex >

A copyable RAII handle that pairs a pointer-like value with a shared (reader) lock on a caller-supplied mutex.

Copies share the same underlying reader lock through reference counting; the lock is released when the last copy is destroyed. This makes a SharedLocked cheap to pass through code paths that branch or fan out without each leaf having to re-acquire.

The borrowed pointer is const-qualified so callers cannot mutate the pointee while holding only a reader's lock. Mutex must satisfy SharedLockablellvm::sys::RWMutex (the LLDB convention) or std::shared_mutex. Use the SharedLockedPtr, SharedLockedSP, SharedLockedUP aliases for the common combinations.

Definition at line 98 of file Locked.h.

Member Typedef Documentation

◆ lock_type

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
using lldb_private::SharedLocked< PtrT, Mutex >::lock_type = std::shared_lock<Mutex>

Definition at line 118 of file Locked.h.

◆ mutex_type

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
using lldb_private::SharedLocked< PtrT, Mutex >::mutex_type = Mutex

Definition at line 117 of file Locked.h.

Constructor & Destructor Documentation

◆ SharedLocked() [1/5]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
lldb_private::SharedLocked< PtrT, Mutex >::SharedLocked ( )
default

◆ SharedLocked() [2/5]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
lldb_private::SharedLocked< PtrT, Mutex >::SharedLocked ( mutex_type & m,
PtrT p )
inline

Definition at line 121 of file Locked.h.

◆ SharedLocked() [3/5]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
lldb_private::SharedLocked< PtrT, Mutex >::SharedLocked ( lock_type lock,
PtrT p )
inline

Definition at line 123 of file Locked.h.

◆ SharedLocked() [4/5]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
lldb_private::SharedLocked< PtrT, Mutex >::SharedLocked ( const SharedLocked< PtrT, Mutex > & )
default

◆ SharedLocked() [5/5]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
lldb_private::SharedLocked< PtrT, Mutex >::SharedLocked ( SharedLocked< PtrT, Mutex > && other)
inline

Definition at line 131 of file Locked.h.

Member Function Documentation

◆ operator=() [1/2]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
SharedLocked & lldb_private::SharedLocked< PtrT, Mutex >::operator= ( const SharedLocked< PtrT, Mutex > & )
default

◆ operator=() [2/2]

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
SharedLocked & lldb_private::SharedLocked< PtrT, Mutex >::operator= ( SharedLocked< PtrT, Mutex > && other)
inline

Definition at line 134 of file Locked.h.

◆ detail::LockedAccessors< SharedLocked< PtrT, Mutex >, PtrT >

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
friend class detail::LockedAccessors< SharedLocked< PtrT, Mutex >, PtrT >
friend

Definition at line 82 of file Locked.h.

Member Data Documentation

◆ m_lock

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
std::shared_ptr<lock_type> lldb_private::SharedLocked< PtrT, Mutex >::m_lock
private

Definition at line 141 of file Locked.h.

◆ m_ptr

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
PtrT lldb_private::SharedLocked< PtrT, Mutex >::m_ptr {}
private

Definition at line 142 of file Locked.h.

◆ PointeeIsConst

template<typename PtrT, typename Mutex = llvm::sys::RWMutex>
bool lldb_private::SharedLocked< PtrT, Mutex >::PointeeIsConst
staticconstexprprivate
Initial value:
= []() {
if constexpr (std::is_pointer_v<PtrT>)
return std::is_const_v<std::remove_pointer_t<PtrT>>;
else
return std::is_const_v<typename PtrT::element_type>;
}()

Definition at line 106 of file Locked.h.


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