fix: The timer sequence stuck in infinite loop after series of delete operation
[lunaix-os.git] / lunaix-os / includes / lunaix / ds / mutex.h
1 #ifndef __LUNAIX_MUTEX_H
2 #define __LUNAIX_MUTEX_H
3
4 #include "semaphore.h"
5
6 // TODO: implement mutex lock
7
8 typedef struct sem_t mutex_t;
9
10 static inline void mutex_init(mutex_t *mutex) {
11     sem_init(mutex, 1);
12 }
13
14 static inline unsigned int mutex_on_hold(mutex_t *mutex) {
15     return !atomic_load(&mutex->counter);
16 }
17
18 static inline void mutex_lock(mutex_t *mutex) {
19     sem_wait(mutex);
20 }
21
22 static inline void mutex_unlock(mutex_t *mutex) {
23     sem_post(mutex);
24 }
25
26 #endif /* __LUNAIX_MUTEX_H */