8 #ifndef PSYLLID_LOCKED_RESOURCE_HH_ 9 #define PSYLLID_LOCKED_RESOURCE_HH_ 18 template<
class x_resource,
class x_parent,
class x_mutex = std::mutex,
class x_lock = std::unique_lock< x_mutex > >
49 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
56 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
58 f_resource(
std::move( a_orig.f_resource ) ),
59 f_lock(
std::move( a_orig.f_lock ) ),
60 f_have_lock( f_lock.owns_lock() )
62 a_orig.f_resource.reset();
63 a_orig.f_lock.release();
64 a_orig.f_have_lock.store(
false );
67 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
69 f_resource( a_resource ),
71 f_have_lock( f_lock.owns_lock() )
74 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
78 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
81 f_resource = std::move( a_rhs.f_resource );
82 a_rhs.f_resource.reset();
83 f_lock = std::move( a_rhs.f_lock );
84 a_rhs.f_lock.release();
85 f_have_lock.store( a_rhs.f_have_lock.load() );
86 a_rhs.f_have_lock.store(
false );
90 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
93 return f_resource.get();
96 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
99 return f_have_lock.load();
102 template<
class x_resource,
class x_parent,
class x_mutex,
class x_lock >
107 f_have_lock.store(
false );
std::shared_ptr< x_resource > resource_ptr_t
virtual ~locked_resource()
resource_ptr_t f_resource
locked_resource & operator=(locked_resource &&a_rhs)
std::atomic< bool > f_have_lock
resource_t * operator->() const