]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/include/ddekit/c++/condvar.h
Inital import
[l4.git] / l4 / pkg / dde / include / ddekit / c++ / condvar.h
1 /*
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>
6  * \date    2008-08-26
7  */
8
9 /*
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.
13  */
14
15 #pragma once
16
17 /** \file ddekit/condvar.h */
18
19 #include <l4/sys/compiler.h>
20 #include <l4/dde/ddekit/lock.h>
21
22 namespace DDEKit
23 {
24         class Cond_var
25         {
26                 public:
27                         explicit Cond_var() { }
28                         virtual ~Cond_var() { }
29
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;
33
34                         static Cond_var* create();
35
36                 private:
37                         Cond_var(const Cond_var&) { };
38                         Cond_var& operator =(const Cond_var&) { return *this; }
39         };
40 }
41
42 #if 0
43 EXTERN_C_BEGIN
44
45 struct ddekit_condvar;
46 typedef struct ddekit_condvar ddekit_condvar_t;
47
48 /** Initialize conditional variable.
49  *
50  * \ingroup DDEKit_synchronization
51  */
52 ddekit_condvar_t * ddekit_condvar_init(void);
53
54 /** Uninitialize conditional variable. 
55  *
56  * \ingroup DDEKit_synchronization
57  */
58 void ddekit_condvar_deinit(ddekit_condvar_t *cvp);
59
60 /** Wait on a conditional variable.
61  *
62  * \ingroup DDEKit_synchronization
63  */
64 void ddekit_condvar_wait(ddekit_condvar_t *cvp, ddekit_lock_t *mp);
65
66 /** Wait on a conditional variable at most until a timeout expires.
67  *
68  * \ingroup DDEKit_synchronization
69  *
70  * \param cvp    pointer to condvar
71  * \param mp     lock
72  * \param timo   timeout in ms
73  *
74  * \return 0     success
75  * \return !=0   timeout
76  */
77 int  ddekit_condvar_wait_timed(ddekit_condvar_t *cvp, ddekit_lock_t *mp, int timo);
78
79 /** Send signal to the next one waiting for condvar.
80  *
81  * \ingroup DDEKit_synchronization
82  */
83 void ddekit_condvar_signal(ddekit_condvar_t *cvp);
84
85 /** Send signal to all threads waiting for condvar.
86  *
87  * \ingroup DDEKit_synchronization
88  */
89 void ddekit_condvar_broadcast(ddekit_condvar_t *cvp);
90
91 EXTERN_C_END
92 #endif