libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
mutex.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <mutex>
14#include <promeki/namespace.h>
15
16PROMEKI_NAMESPACE_BEGIN
17
18class WaitCondition;
19
41class Mutex {
42 public:
49 class Locker {
50 public:
55 Locker(Mutex &mutex) : _mutex(mutex) { _mutex.lock(); }
56
58 ~Locker() { _mutex.unlock(); }
59
60 Locker(const Locker &) = delete;
61 Locker &operator=(const Locker &) = delete;
62 Locker(Locker &&) = delete;
63 Locker &operator=(Locker &&) = delete;
64
65 private:
66 Mutex &_mutex;
67 };
68
70 Mutex() = default;
71
73 ~Mutex() = default;
74
75 Mutex(const Mutex &) = delete;
76 Mutex &operator=(const Mutex &) = delete;
77 Mutex(Mutex &&) = delete;
78 Mutex &operator=(Mutex &&) = delete;
79
81 void lock() { _mutex.lock(); }
82
84 void unlock() { _mutex.unlock(); }
85
90 bool tryLock() { return _mutex.try_lock(); }
91
92 private:
93 friend class WaitCondition;
94 std::mutex _mutex;
95};
96
97PROMEKI_NAMESPACE_END
98
99#endif // PROMEKI_ENABLE_CORE