mutex: abstract out cond/lock pshared init
[fio.git] / mutex.h
... / ...
CommitLineData
1#ifndef FIO_MUTEX_H
2#define FIO_MUTEX_H
3
4#include <pthread.h>
5#include "lib/types.h"
6
7#define FIO_MUTEX_MAGIC 0x4d555445U
8#define FIO_RWLOCK_MAGIC 0x52574c4fU
9
10struct fio_mutex {
11 pthread_mutex_t lock;
12 pthread_cond_t cond;
13 int value;
14 int waiters;
15 int magic;
16};
17
18struct fio_rwlock {
19 pthread_rwlock_t lock;
20 int magic;
21};
22
23enum {
24 FIO_MUTEX_LOCKED = 0,
25 FIO_MUTEX_UNLOCKED = 1,
26};
27
28extern int __fio_mutex_init(struct fio_mutex *, int);
29extern struct fio_mutex *fio_mutex_init(int);
30extern void __fio_mutex_remove(struct fio_mutex *);
31extern void fio_mutex_remove(struct fio_mutex *);
32extern void fio_mutex_up(struct fio_mutex *);
33extern void fio_mutex_down(struct fio_mutex *);
34extern bool fio_mutex_down_trylock(struct fio_mutex *);
35extern int fio_mutex_down_timeout(struct fio_mutex *, unsigned int);
36
37extern void fio_rwlock_read(struct fio_rwlock *);
38extern void fio_rwlock_write(struct fio_rwlock *);
39extern void fio_rwlock_unlock(struct fio_rwlock *);
40extern struct fio_rwlock *fio_rwlock_init(void);
41extern void fio_rwlock_remove(struct fio_rwlock *);
42
43extern int mutex_init_pshared(pthread_mutex_t *);
44extern int cond_init_pshared(pthread_cond_t *);
45extern int mutex_cond_init_pshared(pthread_mutex_t *, pthread_cond_t *);
46
47#endif