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 int cv_has_waiters(const struct cv *); 21 22 #define cv_wait(cv, lock) \ 23 _cv_timedwait((cv), (lock), 0, 0) 24 #define cv_wait_sig(cv, lock) \ 25 _cv_timedwait((cv), (lock), 0, 1) 26 #define cv_timedwait(cv, lock, timeo) \ 27 _cv_timedwait((cv), (lock), (timeo), 0) 28 #define cv_timedwait_sig(cv, lock, timeo) \ 29 _cv_timedwait((cv), (lock), (timeo), 1) 30 31 #define cv_signal(cv) \ 32 _cv_signal((cv), 0) 33 #define cv_broadcast(cv) \ 34 _cv_signal((cv), 1) 35 #define cv_broadcastpri(cv, pri) \ 36 cv_broadcast((cv)) 37 38 #endif /* _SYS_CONDVAR_H_ */ 39