Botan
2.19.2
Crypto and TLS for C&
src
lib
utils
thread_utils
semaphore.cpp
Go to the documentation of this file.
1
/*
2
* Semaphore
3
* (C) 2013 Joel Low
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#include <botan/internal/semaphore.h>
9
10
// Based on code by Pierre Gaston (http://p9as.blogspot.com/2012/06/c11-semaphores.html)
11
12
namespace
Botan
{
13
14
void
Semaphore::release
(
size_t
n)
15
{
16
for
(
size_t
i = 0; i != n; ++i)
17
{
18
std::lock_guard<std::mutex> lock(m_mutex);
19
20
if
(m_value++ < 0)
21
{
22
++m_wakeups;
23
m_cond.notify_one();
24
}
25
}
26
}
27
28
void
Semaphore::acquire
()
29
{
30
std::unique_lock<std::mutex> lock(m_mutex);
31
if
(m_value-- <= 0)
32
{
33
m_cond.wait(lock, [
this
] {
return
m_wakeups > 0; });
34
--m_wakeups;
35
}
36
}
37
38
}
Botan::Semaphore::release
void release(size_t n=1)
Definition:
semaphore.cpp:14
Botan::Semaphore::acquire
void acquire()
Definition:
semaphore.cpp:28
Botan
Definition:
alg_id.cpp:13
Generated by
1.9.3