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