mavtables  0.2.1
MAVLink router and firewall.
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  */
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  */
53 {
54  std::unique_lock<std::mutex> lock(mutex_);
55  cv_.wait(lock, [this]()
56  {
57  return value_ > 0;
58  });
59  --value_;
60 }
void wait()
Definition: semaphore.cpp:52
void notify()
Definition: semaphore.cpp:38
semaphore(const semaphore &other)=delete