Botan  2.7.0
Crypto and TLS for C++11
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  lock_guard_type<mutex_type> 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<mutex_type> 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