2 * \brief Condition variable interface
3 * \author Thomas Friebel <tf13@os.inf.tu-dresden.de>
4 * \author Christian Helmuth <ch12@os.inf.tu-dresden.de>
5 * \author Bjoern Doebel <doebel@os.inf.tu-dresden.de>
10 * (c) 2006-2008 Technische Universität Dresden
11 * This file is part of TUD:OS, which is distributed under the terms of the
12 * GNU General Public License 2. Please see the COPYING file for details.
17 /** \file ddekit/condvar.h */
19 #include <l4/sys/compiler.h>
20 #include <l4/dde/ddekit/lock.h>
27 explicit Cond_var() { }
28 virtual ~Cond_var() { }
30 virtual int wait(DDEKit::Lock const & lock, int const timeout = -1) = 0;
31 virtual void signal(void) = 0;
32 virtual void broadcast(void) = 0;
34 static Cond_var* create();
37 Cond_var(const Cond_var&) { };
38 Cond_var& operator =(const Cond_var&) { return *this; }
45 struct ddekit_condvar;
46 typedef struct ddekit_condvar ddekit_condvar_t;
48 /** Initialize conditional variable.
50 * \ingroup DDEKit_synchronization
52 ddekit_condvar_t * ddekit_condvar_init(void);
54 /** Uninitialize conditional variable.
56 * \ingroup DDEKit_synchronization
58 void ddekit_condvar_deinit(ddekit_condvar_t *cvp);
60 /** Wait on a conditional variable.
62 * \ingroup DDEKit_synchronization
64 void ddekit_condvar_wait(ddekit_condvar_t *cvp, ddekit_lock_t *mp);
66 /** Wait on a conditional variable at most until a timeout expires.
68 * \ingroup DDEKit_synchronization
70 * \param cvp pointer to condvar
72 * \param timo timeout in ms
77 int ddekit_condvar_wait_timed(ddekit_condvar_t *cvp, ddekit_lock_t *mp, int timo);
79 /** Send signal to the next one waiting for condvar.
81 * \ingroup DDEKit_synchronization
83 void ddekit_condvar_signal(ddekit_condvar_t *cvp);
85 /** Send signal to all threads waiting for condvar.
87 * \ingroup DDEKit_synchronization
89 void ddekit_condvar_broadcast(ddekit_condvar_t *cvp);