Merge branch 'master' into gfio
[fio.git] / mutex.h
1 #ifndef FIO_MUTEX_H
2 #define FIO_MUTEX_H
3
4 #include <pthread.h>
5
6 struct fio_mutex {
7         pthread_mutex_t lock;
8         pthread_cond_t cond;
9         int value;
10         int waiters;
11 };
12
13 enum {
14         FIO_MUTEX_LOCKED        = 0,
15         FIO_MUTEX_UNLOCKED      = 1,
16 };
17
18 extern struct fio_mutex *fio_mutex_init(int);
19 extern void fio_mutex_remove(struct fio_mutex *);
20 extern void fio_mutex_down(struct fio_mutex *);
21 extern int fio_mutex_down_timeout(struct fio_mutex *, unsigned int);
22 extern void fio_mutex_down_read(struct fio_mutex *);
23 extern void fio_mutex_down_write(struct fio_mutex *);
24 extern void fio_mutex_up(struct fio_mutex *);
25 extern void fio_mutex_up_read(struct fio_mutex *);
26 extern void fio_mutex_up_write(struct fio_mutex *);
27
28 static inline struct fio_mutex *fio_mutex_rw_init(void)
29 {
30         return fio_mutex_init(0);
31 }
32
33 static inline int fio_mutex_getval(struct fio_mutex *mutex)
34 {
35         return mutex->value;
36 }
37
38 #endif