mrs_lib
Various reusable classes, functions and utilities for use in MRS projects
Loading...
Searching...
No Matches
lockable.h
1#pragma once
2
3#include <mutex>
4
5namespace mrs_lib
6{
7 template <typename LockedVarT, typename MutexT>
8 class Unlocker;
9
21 template <typename LockedVarT, typename MutexT = std::mutex>
23 {
24 MutexT mtx;
25 LockedVarT locked_var;
26
28
29 public:
30 Lockable() = default;
31
32 Lockable(const LockedVarT& init_val)
33 : locked_var(init_val)
34 {}
35
36 Lockable(const LockedVarT&& init_val)
37 : locked_var(init_val)
38 {}
39
40 LockedVarT& unsafe_access()
41 {
42 return locked_var;
43 }
44
45 void set_mutexed(const LockedVarT& val)
46 {
47 std::scoped_lock lock(mtx);
48 locked_var = val;
49 }
50
51 LockedVarT get_mutexed()
52 {
53 std::scoped_lock lock(mtx);
54 return locked_var;
55 }
56
57 MutexT& mutex()
58 {
59 return mtx;
60 }
61 };
62
71 template <typename LockedVarT, typename MutexT>
73 {
74 public:
76 : lock(lockable.mtx), lockable(lockable)
77 {}
78
79 LockedVarT& operator*()
80 {
81 return lockable.locked_var;
82 }
83
84 LockedVarT* operator->()
85 {
86 return &(lockable.locked_var);
87 }
88
89 private:
90 std::scoped_lock<MutexT> lock;
91 Lockable<LockedVarT>& lockable;
92 };
93
94}
Convenience class for safe and expressive management of mutexed variables.
Definition lockable.h:23
Convenience class for RAII-style access to a varible within a Lockable object.
Definition lockable.h:73
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition attitude_converter.h:24