Merge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly
[dragonfly.git] / sys / sys / condvar.h
1 #ifndef _SYS_CONDVAR_H_
2 #define _SYS_CONDVAR_H_
3
4 #include <sys/spinlock.h>
5
6 struct lock;
7
8 struct cv {
9         struct spinlock cv_lock;
10         int             cv_waiters;
11         const char      *cv_desc;
12 };
13
14 void    cv_init(struct cv *, const char *desc);
15 void    cv_destroy(struct cv *);
16
17 int     _cv_timedwait(struct cv *, struct lock *, int timo, int wakesig);
18 void    _cv_signal(struct cv *, int broadcast);
19
20 #define cv_wait(cv, lock)                       \
21                 _cv_timedwait((cv), (lock), 0, 0)
22 #define cv_wait_sig(cv, lock)                   \
23                 _cv_timedwait((cv), (lock), 0, 1)
24 #define cv_timedwait(cv, lock, timeo)           \
25                 _cv_timedwait((cv), (lock), (timeo), 0)
26 #define cv_timedwait_sig(cv, lock, timeo)       \
27                 _cv_timedwait((cv), (lock), (timeo), 1)
28
29 #define cv_signal(cv)                           \
30                 _cv_signal((cv), 0)
31 #define cv_broadcast(cv)                        \
32                 _cv_signal((cv), 1)
33 #define cv_broadcastpri(cv)                     \
34                 cv_broadcast((cv))
35
36 #endif  /* _SYS_CONDVAR_H_ */