]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/dde/fbsd/examples/tests/lock_sema/main.c
Inital import
[l4.git] / l4 / pkg / dde / fbsd / examples / tests / lock_sema / main.c
1 #include <sys/types.h>
2 #include <sys/param.h>
3 #include <sys/kernel.h>
4 #include <sys/lock.h>
5 #include <sys/sema.h>
6 #include <machine/stdarg.h>
7
8 #include <l4/dde/fbsd/dde.h>
9 #include <l4/dde/dde.h>
10 #include <l4/dde/fbsd/bsd_dde.h>
11 #include <l4/log/l4log.h>
12 #include <l4/thread/thread.h>
13
14 l4_ssize_t l4libc_heapsize = 1*1024*1024;
15
16 static struct sema sem1;
17
18 static void cons(void *data) {
19         int res;
20
21         bsd_dde_prepare_thread("cons");
22
23         LOG("%d: entered (value=%d)", (int) data, sema_value(&sem1));
24
25         res = sema_timedwait(&sem1, hz/10);
26         LOG("%d: %s (value=%d)", (int) data, (res?"timeout":"success"), sema_value(&sem1));
27 }
28
29 int main(int argc, char **argv) {
30         LOG_Enter("");
31
32         ddekit_init();
33         bsd_dde_init();
34         
35         sema_init(&sem1, 0, "test semaphore");
36
37         LOG("----------------------------------------");
38
39         LOG("wait for timeout");
40         l4thread_create(cons, (void*) 1, L4THREAD_CREATE_ASYNC);
41         l4thread_sleep(200);
42
43         LOG("----------------------------------------");
44
45         LOG("calling post before");
46         sema_post(&sem1);
47         l4thread_create(cons, (void*) 2, L4THREAD_CREATE_ASYNC);
48         l4thread_sleep(200);
49
50         LOG("----------------------------------------");
51
52         LOG("waking up one of two threads by post");
53         l4thread_create(cons, (void*) 3, L4THREAD_CREATE_ASYNC);
54         l4thread_create(cons, (void*) 4, L4THREAD_CREATE_ASYNC);
55         l4thread_sleep(30);
56         sema_post(&sem1);
57         l4thread_sleep(200);
58
59         LOG("----------------------------------------");
60
61         LOG("waking up two threads by signal");
62         l4thread_create(cons, (void*) 5, L4THREAD_CREATE_ASYNC);
63         l4thread_create(cons, (void*) 6, L4THREAD_CREATE_ASYNC);
64         l4thread_sleep(30);
65         sema_post(&sem1);
66         l4thread_sleep(30);
67         sema_post(&sem1);
68         l4thread_sleep(200);
69
70         LOG("----------------------------------------");
71
72         l4thread_sleep_forever();
73         return 0;
74 }