Botan  2.4.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/types.h>
11 
12 #if defined(BOTAN_TARGET_OS_HAS_THREADS)
13 
14 #include <mutex>
15 
16 namespace Botan {
17 
18 template<typename T> using lock_guard_type = std::lock_guard<T>;
19 typedef std::mutex mutex_type;
20 
21 }
22 
23 #elif defined(BOTAN_TARGET_OS_TYPE_IS_UNIKERNEL) || defined(BOTAN_TARGET_OS_IS_LLVM)
24 
25 // No threads
26 
27 namespace Botan {
28 
29 template<typename Mutex>
30 class lock_guard final
31  {
32  public:
33  explicit lock_guard(Mutex& m) : m_mutex(m)
34  { m_mutex.lock(); }
35 
36  ~lock_guard() { m_mutex.unlock(); }
37 
38  lock_guard(const lock_guard& other) = delete;
39  lock_guard& operator=(const lock_guard& other) = delete;
40  private:
41  Mutex& m_mutex;
42  };
43 
44 class noop_mutex final
45  {
46  public:
47  void lock() {}
48  void unlock() {}
49  };
50 
51 typedef noop_mutex mutex_type;
52 template<typename T> using lock_guard_type = lock_guard<T>;
53 
54 }
55 
56 #else
57  #error "Threads unexpectedly disabled in non unikernel build"
58 #endif
59 
60 #endif
Definition: alg_id.cpp:13
std::vector< T > unlock(const secure_vector< T > &in)
Definition: secmem.h:95