Compute Library
 21.11
Mutex.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2019 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
24 #ifndef __ARM_COMPUTE_MUTEX_H__
25 #define __ARM_COMPUTE_MUTEX_H__
26 
27 #include <mutex>
28 
29 namespace arm_compute
30 {
31 #ifndef NO_MULTI_THREADING
32 /** Wrapper of Mutex data-object */
33 using Mutex = std::mutex;
34 
35 /** Wrapper of lock_guard data-object */
36 template <typename Mutex>
37 using lock_guard = std::lock_guard<Mutex>;
38 
39 /** Wrapper of lock_guard data-object */
40 template <typename Mutex>
41 using unique_lock = std::unique_lock<Mutex>;
42 #else /* NO_MULTI_THREADING */
43 /** Wrapper implementation of Mutex data-object */
44 class Mutex
45 {
46 public:
47  /** Default constructor */
48  Mutex() = default;
49  /** Default destructor */
50  ~Mutex() = default;
51 
52  /** Lock */
53  void lock() {};
54 
55  /** Unlock */
56  void unlock() {};
57 
58  /** Try the lock.
59  *
60  * @return true.
61  */
62  bool try_lock()
63  {
64  return true;
65  }
66 };
67 
68 /** Wrapper implementation of lock-guard data-object */
69 template <typename Mutex>
70 class lock_guard
71 {
72 public:
73  typedef Mutex mutex_type;
74 
75 public:
76  explicit lock_guard(Mutex &m_)
77  : m(m_)
78  {
79  }
80  ~lock_guard()
81  {
82  }
83  lock_guard(const lock_guard &) = delete;
84 
85 private:
86  mutex_type &m;
87 };
88 
89 /** Wrapper implementation of unique-lock data-object */
90 template <typename Mutex>
91 class unique_lock
92 {
93 public:
94  typedef Mutex mutex_type;
95 
96 public:
97  unique_lock() noexcept : m(nullptr)
98  {
99  }
100  explicit unique_lock(mutex_type &m)
101  : m(&m)
102  {
103  }
104  unique_lock(const unique_lock &) = delete;
105  unique_lock(unique_lock &&) = default;
106  unique_lock &operator=(const unique_lock &) = delete;
107  unique_lock &operator=(unique_lock &&) = default;
108  ~unique_lock() = default;
109  void lock()
110  {
111  }
112  bool try_lock()
113  {
114  return true;
115  }
116  void unlock()
117  {
118  }
119 
120 private:
121  mutex_type *m;
122 };
123 #endif /* NO_MULTI_THREADING */
124 }
125 #endif /* __ARM_COMPUTE_MUTEX_H__ */
std::mutex Mutex
Wrapper of Mutex data-object.
Definition: Mutex.h:33
std::unique_lock< Mutex > unique_lock
Wrapper of lock_guard data-object.
Definition: Mutex.h:41
Copyright (c) 2017-2021 Arm Limited.
std::lock_guard< Mutex > lock_guard
Wrapper of lock_guard data-object.
Definition: Mutex.h:37