xref: /dragonfly/sys/sys/condvar.h (revision 36a3d1d6)
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_ */
37