mutex.h revision 521da527743088a9bd2ab882f8b64799d49d5848
107739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#ifndef FIO_MUTEX_H
207739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#define FIO_MUTEX_H
307739b57f09886b41323c605b0dbda7d2c12522bJens Axboe
407739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#include <pthread.h>
507739b57f09886b41323c605b0dbda7d2c12522bJens Axboe
6cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboestruct fio_mutex {
707739b57f09886b41323c605b0dbda7d2c12522bJens Axboe	pthread_mutex_t lock;
807739b57f09886b41323c605b0dbda7d2c12522bJens Axboe	pthread_cond_t cond;
964d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboe	int value;
104d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe	int waiters;
1107739b57f09886b41323c605b0dbda7d2c12522bJens Axboe};
1207739b57f09886b41323c605b0dbda7d2c12522bJens Axboe
13521da527743088a9bd2ab882f8b64799d49d5848Jens Axboeenum {
14521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe	FIO_MUTEX_LOCKED	= 0,
15521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe	FIO_MUTEX_UNLOCKED	= 1,
16521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe};
17521da527743088a9bd2ab882f8b64799d49d5848Jens Axboe
18cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboeextern struct fio_mutex *fio_mutex_init(int);
19cdd18ad87ed9a3639b76c41cfc9682ad7cce652eJens Axboeextern void fio_mutex_remove(struct fio_mutex *);
20af4bab56db4f87410c491c356954bbb65171f94dJens Axboeextern void fio_mutex_down(struct fio_mutex *);
21656b1393d43f9f22738404582ea14dec956aea83Jens Axboeextern int fio_mutex_down_timeout(struct fio_mutex *, unsigned int);
2264d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboeextern void fio_mutex_down_read(struct fio_mutex *);
2364d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboeextern void fio_mutex_down_write(struct fio_mutex *);
24af4bab56db4f87410c491c356954bbb65171f94dJens Axboeextern void fio_mutex_up(struct fio_mutex *);
2564d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboeextern void fio_mutex_up_read(struct fio_mutex *);
2664d4d313ef4f537408d28fac863cf2a2b0f00175Jens Axboeextern void fio_mutex_up_write(struct fio_mutex *);
2707739b57f09886b41323c605b0dbda7d2c12522bJens Axboe
289c5b52907227f8f50dc472d11601869f75b8d663Jens Axboestatic inline struct fio_mutex *fio_mutex_rw_init(void)
299c5b52907227f8f50dc472d11601869f75b8d663Jens Axboe{
309c5b52907227f8f50dc472d11601869f75b8d663Jens Axboe	return fio_mutex_init(0);
319c5b52907227f8f50dc472d11601869f75b8d663Jens Axboe}
329c5b52907227f8f50dc472d11601869f75b8d663Jens Axboe
334d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboestatic inline int fio_mutex_getval(struct fio_mutex *mutex)
344d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe{
354d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe	return mutex->value;
364d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe}
374d4e80f2b4260f2c8b37a8612ce655502a799f7aJens Axboe
3807739b57f09886b41323c605b0dbda7d2c12522bJens Axboe#endif
39