mavtables
0.2.1
MAVLink router and firewall.
src
semaphore.cpp
Go to the documentation of this file.
1
// MAVLink router and firewall.
2
// Copyright (C) 2017-2018 Michael R. Shannon <mrshannon.aerospace@gmail.com>
3
//
4
// This program is free software; you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation; either version 2 of the License, or
7
// (at your option) any later version.
8
//
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
18
#include <cstdint>
19
#include <mutex>
20
21
#include "
semaphore.hpp
"
22
23
24
/** Construct a semaphore with the given initial value.
25
*
26
* \param initial_value The initial value of the semaphore. Defaults to 0.
27
*/
28
semaphore::semaphore
(
size_t
initial_value)
29
: value_(initial_value)
30
{
31
}
32
33
34
/** Signal the semaphore.
35
*
36
* Increments the semaphore.
37
*/
38
void
semaphore::notify
()
39
{
40
{
41
std::lock_guard<std::mutex> lock(mutex_);
42
++value_;
43
}
44
cv_.notify_one();
45
}
46
47
48
/** Wait on the semaphore.
49
*
50
* Decrements the semaphore.
51
*/
52
void
semaphore::wait
()
53
{
54
std::unique_lock<std::mutex> lock(mutex_);
55
cv_.wait(lock, [
this
]()
56
{
57
return
value_ > 0;
58
});
59
--value_;
60
}
semaphore::wait
void wait()
Definition:
semaphore.cpp:52
semaphore::notify
void notify()
Definition:
semaphore.cpp:38
semaphore.hpp
semaphore::semaphore
semaphore(const semaphore &other)=delete
Generated by
1.8.14