Botan 2.19.2
Crypto and TLS for C&
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
12namespace Botan {
13
14void 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
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}
void release(size_t n=1)
Definition: semaphore.cpp:14
Definition: alg_id.cpp:13