19 template<
class data_t,
class synchronization_primitive_t>
34 template<
class data_t,
class synchronization_primitive_t>
48 shared_proxy(data_t* pData, synchronization_primitive_t* pSynchronizationPrimitive,
bool bTryLock);
58 [[nodiscard]] data_t* operator->() noexcept;
59 [[nodiscard]]
const data_t* operator->()
const noexcept;
61 [[nodiscard]] data_t& operator*() noexcept;
62 [[nodiscard]]
const data_t& operator*()
const noexcept;
65 synchronization_primitive_t* m_pSynchronizationPrimitive =
nullptr;
66 data_t* m_pData =
nullptr;
80 template<
class data_t,
class synchronization_primitive_t = std::mutex>
91 class synchronization_primitive_raii
94 synchronization_primitive_raii();
95 ~synchronization_primitive_raii();
101 synchronization_primitive_t* get_object() noexcept;
104 synchronization_primitive_t sp;
117 template<
class... args_t>
138 [[nodiscard]] std::optional<proxy>
try_lock();
141 synchronization_primitive_raii m_SynchronizationPrimitiveRAII;
145 template<
class synchronization_primitive_t>
146 inline void lock_synchronization_primitive(synchronization_primitive_t* pSP)
151 template<
class synchronization_primitive_t>
152 inline void unlock_synchronization_primitive(synchronization_primitive_t* pSP)
157 template<
class synchronization_primitive_t>
158 inline bool try_lock_synchronization_primitive(synchronization_primitive_t* pSP)
160 return pSP->try_lock();
A proxy class that provides access to an object stored in threads_shared and provides raii for synchr...
A class that provides thread-safe access to an object, including construction and destruction.
proxy lock()
Wait for other threads to finish work with data object and retrieve proxy object.
std::optional< proxy > try_lock()
Try to lock synchronization primitive and get proxy.
threads_shared(args_t &&... args)
threads_shared object constructor
~threads_shared()
threads_shared object destructor