Botan  2.1.0
Crypto and TLS for C++11
mutex.h
Go to the documentation of this file.
1 /*
2 * (C) 2016 Jack Lloyd
3 *
4 * Botan is released under the Simplified BSD License (see license.txt)
5 */
6 
7 #ifndef BOTAN_UTIL_MUTEX_H__
8 #define BOTAN_UTIL_MUTEX_H__
9 
10 #include <botan/build.h>
11 #include <botan/types.h>
12 
13 #if defined(BOTAN_TARGET_OS_HAS_THREADS)
14 
15 #include <mutex>
16 
17 namespace Botan {
18 
19 template<typename T> using lock_guard_type = std::lock_guard<T>;
20 typedef std::mutex mutex_type;
21 
22 }
23 
24 #elif defined(BOTAN_TARGET_OS_TYPE_IS_UNIKERNEL)
25 
26 // No threads
27 
28 namespace Botan {
29 
30 template<typename Mutex>
31 class lock_guard
32  {
33  public:
34  explicit lock_guard(Mutex& m) : m_mutex(m)
35  { m_mutex.lock(); }
36 
37  ~lock_guard() { m_mutex.unlock(); }
38 
39  lock_guard(const lock_guard& other) = delete;
40  lock_guard& operator=(const lock_guard& other) = delete;
41  private:
42  Mutex& m_mutex;
43  };
44 
45 class noop_mutex
46  {
47  public:
48  void lock() {}
49  void unlock() {}
50  };
51 
52 typedef noop_mutex mutex_type;
53 template<typename T> using lock_guard_type = lock_guard<T>;
54 
55 }
56 
57 #else
58  #error "Threads unexpectedly disabled in non unikernel build"
59 #endif
60 
61 #endif
Definition: alg_id.cpp:13
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:125