Merge branch 'master' into prog-loader
[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 #include <lunaix/types.h>
6
7 typedef struct mutex_s
8 {
9     struct sem_t sem;
10     pid_t owner;
11 } mutex_t;
12
13 static inline void
14 mutex_init(mutex_t* mutex)
15 {
16     sem_init(&mutex->sem, 1);
17 }
18
19 static inline int
20 mutex_on_hold(mutex_t* mutex)
21 {
22     return !atomic_load(&mutex->sem.counter);
23 }
24
25 void
26 mutex_lock(mutex_t* mutex);
27
28 void
29 mutex_unlock(mutex_t* mutex);
30
31 void
32 mutex_unlock_for(mutex_t* mutex, pid_t pid);
33
34 #endif /* __LUNAIX_MUTEX_H */