ros2_control - humble
Loading...
Searching...
No Matches
realtime_tools
include
realtime_tools
realtime_box.hpp
1
// Copyright (c) 2009, Willow Garage, Inc.
2
//
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions are met:
5
//
6
// * Redistributions of source code must retain the above copyright
7
// notice, this list of conditions and the following disclaimer.
8
//
9
// * Redistributions in binary form must reproduce the above copyright
10
// notice, this list of conditions and the following disclaimer in the
11
// documentation and/or other materials provided with the distribution.
12
//
13
// * Neither the name of the Willow Garage, Inc. nor the names of its
14
// contributors may be used to endorse or promote products derived from
15
// this software without specific prior written permission.
16
//
17
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
// POSSIBILITY OF SUCH DAMAGE.
28
29
// Author: Stuart Glaser
30
31
#ifndef REALTIME_TOOLS__REALTIME_BOX_HPP_
32
#define REALTIME_TOOLS__REALTIME_BOX_HPP_
33
34
#include <mutex>
35
#include <string>
36
37
namespace
realtime_tools
38
{
45
template
<
class
T>
46
class
RealtimeBox
47
{
48
public
:
49
explicit
RealtimeBox
(
const
T & initial = T()) : thing_(initial) {}
50
51
void
set(
const
T & value)
52
{
53
std::lock_guard<std::mutex> guard(thing_lock_RT_);
54
thing_ = value;
55
}
56
57
void
get(T & ref)
58
{
59
std::lock_guard<std::mutex> guard(thing_lock_RT_);
60
ref = thing_;
61
}
62
63
private
:
64
// The thing that's in the box.
65
T thing_;
66
67
// Protects access to the thing in the box. This mutex is
68
// guaranteed to be locked for no longer than the duration of the
69
// copy, so as long as the copy is realtime safe and the OS has
70
// priority inheritance for mutexes, this lock can be safely locked
71
// from within realtime.
72
std::mutex thing_lock_RT_;
73
};
74
75
}
// namespace realtime_tools
76
77
#endif
// REALTIME_TOOLS__REALTIME_BOX_HPP_
realtime_tools::RealtimeBox
Definition
realtime_box.hpp:47
realtime_tools
A pthread mutex wrapper that provides a mutex with the priority inheritance protocol and a priority c...
Definition
async_function_handler.hpp:38
Generated by
1.9.8