]> git.lizzy.rs Git - dragonstd.git/blob - flag.c
e7d1a6f4c48abd8379cb5d48b006c0addbc8c1e7
[dragonstd.git] / flag.c
1 #include <stdlib.h>
2 #include "flag.h"
3
4 Flag *flag_create()
5 {
6         Flag *flag = malloc(sizeof *flag);
7         flag->done = false;
8         pthread_cond_init(&flag->cv, NULL);
9         pthread_mutex_init(&flag->mtx, NULL);
10         return flag;
11 }
12
13 void flag_delete(Flag *flag)
14 {
15         pthread_cond_destroy(&flag->cv);        
16         pthread_mutex_destroy(&flag->mtx);
17         free(flag);
18 }
19
20 void flag_wait(Flag *flag)
21 {
22         pthread_mutex_lock(&flag->mtx);
23         if (! flag->done)
24                 pthread_cond_wait(&flag->cv, &flag->mtx);
25         pthread_mutex_unlock(&flag->mtx);
26 }
27
28 void flag_set(Flag *flag)
29 {
30         pthread_mutex_lock(&flag->mtx);
31         flag->done = true;
32         pthread_cond_broadcast(&flag->cv);
33         pthread_mutex_unlock(&flag->mtx);
34 }