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

A move-only RAII handle that pairs a pointer-like value with an exclusive lock on a caller-supplied mutex. More...

#include <Locked.h>

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

Public Types

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

Public Member Functions

 Locked ()=default
 Locked (mutex_type &m, PtrT p)
 Locked (lock_type lock, PtrT p)
 Locked (Locked &&other)
Lockedoperator= (Locked &&other)
 Locked (const Locked &)=delete
Lockedoperator= (const Locked &)=delete
Public Member Functions inherited from lldb_private::detail::LockedAccessors< Locked< PtrT, std::recursive_mutex >, PtrT >
auto operator-> () const
decltype(auto) operator* () const
auto get () const
 operator bool () const

Private Attributes

lock_type m_lock
PtrT m_ptr {}

Friends

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

Detailed Description

template<typename PtrT, typename Mutex = std::recursive_mutex>
class lldb_private::Locked< PtrT, Mutex >

A move-only RAII handle that pairs a pointer-like value with an exclusive lock on a caller-supplied mutex.

While the handle is alive the borrowed pointer is serialized against other threads that go through the same mutex.

PtrT is the pointer-like value: a raw pointer (T*), std::shared_ptr<T>, or std::unique_ptr<T>. Mutex may be any type that satisfies Lockablestd::mutex, std::recursive_mutex, std::shared_mutex, or llvm::sys::RWMutex all work. Use the LockedPtr, LockedSP, LockedUP aliases for the common combinations.

Definition at line 55 of file Locked.h.

Member Typedef Documentation

◆ lock_type

template<typename PtrT, typename Mutex = std::recursive_mutex>
using lldb_private::Locked< PtrT, Mutex >::lock_type = std::unique_lock<Mutex>

Definition at line 60 of file Locked.h.

◆ mutex_type

template<typename PtrT, typename Mutex = std::recursive_mutex>
using lldb_private::Locked< PtrT, Mutex >::mutex_type = Mutex

Definition at line 59 of file Locked.h.

Constructor & Destructor Documentation

◆ Locked() [1/5]

template<typename PtrT, typename Mutex = std::recursive_mutex>
lldb_private::Locked< PtrT, Mutex >::Locked ( )
default

◆ Locked() [2/5]

template<typename PtrT, typename Mutex = std::recursive_mutex>
lldb_private::Locked< PtrT, Mutex >::Locked ( mutex_type & m,
PtrT p )
inline

Definition at line 63 of file Locked.h.

◆ Locked() [3/5]

template<typename PtrT, typename Mutex = std::recursive_mutex>
lldb_private::Locked< PtrT, Mutex >::Locked ( lock_type lock,
PtrT p )
inline

Definition at line 64 of file Locked.h.

◆ Locked() [4/5]

template<typename PtrT, typename Mutex = std::recursive_mutex>
lldb_private::Locked< PtrT, Mutex >::Locked ( Locked< PtrT, Mutex > && other)
inline

Definition at line 69 of file Locked.h.

◆ Locked() [5/5]

template<typename PtrT, typename Mutex = std::recursive_mutex>
lldb_private::Locked< PtrT, Mutex >::Locked ( const Locked< PtrT, Mutex > & )
delete

Member Function Documentation

◆ operator=() [1/2]

template<typename PtrT, typename Mutex = std::recursive_mutex>
Locked & lldb_private::Locked< PtrT, Mutex >::operator= ( const Locked< PtrT, Mutex > & )
delete

◆ operator=() [2/2]

template<typename PtrT, typename Mutex = std::recursive_mutex>
Locked & lldb_private::Locked< PtrT, Mutex >::operator= ( Locked< PtrT, Mutex > && other)
inline

Definition at line 72 of file Locked.h.

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

template<typename PtrT, typename Mutex = std::recursive_mutex>
friend class detail::LockedAccessors< Locked< PtrT, Mutex >, PtrT >
friend

Definition at line 35 of file Locked.h.

Member Data Documentation

◆ m_lock

template<typename PtrT, typename Mutex = std::recursive_mutex>
lock_type lldb_private::Locked< PtrT, Mutex >::m_lock
private

Definition at line 81 of file Locked.h.

◆ m_ptr

template<typename PtrT, typename Mutex = std::recursive_mutex>
PtrT lldb_private::Locked< PtrT, Mutex >::m_ptr {}
private

Definition at line 82 of file Locked.h.


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