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
5
namespace
mrs_lib
6
{
7
template
<
typename
LockedVarT,
typename
MutexT>
8
class
Unlocker;
9
21
template
<
typename
LockedVarT,
typename
MutexT = std::mutex>
22
class
Lockable
23
{
24
MutexT mtx;
25
LockedVarT locked_var;
26
27
friend
Unlocker<LockedVarT, MutexT>
;
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>
72
class
Unlocker
73
{
74
public
:
75
Unlocker
(
Lockable<LockedVarT, MutexT>
& lockable)
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
}
mrs_lib::Lockable
Convenience class for safe and expressive management of mutexed variables.
Definition
lockable.h:23
mrs_lib::Unlocker
Convenience class for RAII-style access to a varible within a Lockable object.
Definition
lockable.h:73
mrs_lib
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition
attitude_converter.h:24
include
mrs_lib
lockable.h
Generated by
1.9.8