1
1
#pragma once
2
2
#include " AudioConfig.h"
3
3
#include " AudioTools/CoreAudio/AudioLogger.h"
4
-
5
- #ifdef USE_STD_CONCURRENCY
6
- # include < mutex>
7
- #endif
8
-
9
- #ifdef ESP32
10
- # include " freertos/FreeRTOS.h"
11
- # include " freertos/semphr.h"
12
- #else
13
- # include " FreeRTOS.h"
14
- # include " semphr.h"
15
- #endif
4
+ #include " Mutex.h"
16
5
17
6
namespace audio_tools {
18
7
19
- /* *
20
- * @brief Empty Mutex implementation which does nothing
21
- * @ingroup concurrency
22
- * @author Phil Schatzmann
23
- * @copyright GPLv3
24
- */
25
- class MutexBase {
26
- public:
27
- virtual void lock () {}
28
- virtual void unlock () {}
29
- };
30
-
31
- #if defined(USE_STD_CONCURRENCY)
32
-
33
- /* *
34
- * @brief Mutex implemntation based on std::mutex
35
- * @ingroup concurrency
36
- * @author Phil Schatzmann
37
- * @copyright GPLv3
38
- */
39
- class StdMutex : public MutexBase {
40
- public:
41
- void lock () override { std_mutex.lock (); }
42
- void unlock () override { std_mutex.unlock (); }
43
-
44
- protected:
45
- std::mutex std_mutex;
46
- };
47
-
48
- #endif
49
-
50
-
51
- /* *
52
- * @brief Mutex implemntation using FreeRTOS
53
- * @ingroup concurrency
54
- * @author Phil Schatzmann
55
- * @copyright GPLv3 *
56
- */
57
- class Mutex : public MutexBase {
58
- public:
59
- Mutex () {
60
- TRACED ();
61
- xSemaphore = xSemaphoreCreateBinary ();
62
- xSemaphoreGive (xSemaphore);
63
- }
64
- ~Mutex () {
65
- TRACED ();
66
- vSemaphoreDelete (xSemaphore);
67
- }
68
- void lock () override {
69
- TRACED ();
70
- xSemaphoreTake (xSemaphore, portMAX_DELAY);
71
- }
72
- void unlock () override {
73
- TRACED ();
74
- xSemaphoreGive (xSemaphore);
75
- }
76
-
77
- protected:
78
- SemaphoreHandle_t xSemaphore = NULL ;
79
- };
80
-
81
8
82
9
/* *
83
10
* @brief RAII implementaion using a Mutex: Only a few microcontrollers provide
@@ -90,23 +17,25 @@ class Mutex : public MutexBase {
90
17
*/
91
18
class LockGuard {
92
19
public:
93
- LockGuard (Mutex &mutex) {
20
+ LockGuard (MutexBase &mutex) {
94
21
TRACED ();
95
22
p_mutex = &mutex;
96
23
p_mutex->lock ();
97
24
}
98
- LockGuard (Mutex *mutex) {
25
+ LockGuard (MutexBase *mutex) {
99
26
TRACED ();
100
27
p_mutex = mutex;
101
- p_mutex->lock ();
28
+ if (p_mutex != nullptr )
29
+ p_mutex->lock ();
102
30
}
103
31
~LockGuard () {
104
32
TRACED ();
105
- p_mutex->unlock ();
33
+ if (p_mutex != nullptr )
34
+ p_mutex->unlock ();
106
35
}
107
36
108
37
protected:
109
- Mutex *p_mutex = nullptr ;
38
+ MutexBase *p_mutex = nullptr ;
110
39
};
111
40
112
41
}
0 commit comments