import cbaos v0.1
[cbaos.git] / arch / unix / include / lock.h
blob59eca4015f2842f31d9843579f5a4a4a0df3b774
1 #ifndef _ARCH_LOCK_H_
2 #define _ARCH_LOCK_H_
4 #include <signal.h>
5 #include <stdlib.h>
7 typedef sigset_t lock_state_t;
9 struct lock {
10 lock_state_t lock_state;
13 #define LOCK_INIT (struct lock) {}
15 static inline void lock_init(struct lock *lock)
19 static inline void lock(struct lock *lock)
21 sigset_t sigs;
22 sigemptyset(&sigs);
23 sigaddset(&sigs, SIGALRM);
24 sigprocmask(SIG_BLOCK, &sigs, &lock->lock_state);
27 static inline void unlock(struct lock *lock)
29 sigprocmask(SIG_SETMASK, &lock->lock_state, NULL);
32 #endif