Lines Matching full:mutex
14 #include "mutex.h"
21 void __fio_mutex_remove(struct fio_mutex *mutex)
23 assert(mutex->magic == FIO_MUTEX_MAGIC);
24 pthread_cond_destroy(&mutex->cond);
27 void fio_mutex_remove(struct fio_mutex *mutex)
29 __fio_mutex_remove(mutex);
30 munmap((void *) mutex, sizeof(*mutex));
33 int __fio_mutex_init(struct fio_mutex *mutex, int value)
39 mutex->value = value;
40 mutex->magic = FIO_MUTEX_MAGIC;
63 pthread_cond_init(&mutex->cond, &cond);
65 ret = pthread_mutex_init(&mutex->lock, &attr);
78 struct fio_mutex *mutex = NULL;
80 mutex = (void *) mmap(NULL, sizeof(struct fio_mutex),
83 if (mutex == MAP_FAILED) {
84 perror("mmap mutex");
88 if (!__fio_mutex_init(mutex, value))
89 return mutex;
91 fio_mutex_remove(mutex);
100 int fio_mutex_down_timeout(struct fio_mutex *mutex, unsigned int seconds)
106 assert(mutex->magic == FIO_MUTEX_MAGIC);
112 pthread_mutex_lock(&mutex->lock);
114 while (!mutex->value && !ret) {
115 mutex->waiters++;
121 ret = pthread_cond_timedwait(&mutex->cond, &mutex->lock, &t);
125 mutex->waiters--;
129 mutex->value--;
130 pthread_mutex_unlock(&mutex->lock);
136 int fio_mutex_down_trylock(struct fio_mutex *mutex)
140 assert(mutex->magic == FIO_MUTEX_MAGIC);
142 pthread_mutex_lock(&mutex->lock);
143 if (mutex->value) {
144 mutex->value--;
147 pthread_mutex_unlock(&mutex->lock);
152 void fio_mutex_down(struct fio_mutex *mutex)
154 assert(mutex->magic == FIO_MUTEX_MAGIC);
156 pthread_mutex_lock(&mutex->lock);
158 while (!mutex->value) {
159 mutex->waiters++;
160 pthread_cond_wait(&mutex->cond, &mutex->lock);
161 mutex->waiters--;
164 mutex->value--;
165 pthread_mutex_unlock(&mutex->lock);
168 void fio_mutex_up(struct fio_mutex *mutex)
172 assert(mutex->magic == FIO_MUTEX_MAGIC);
174 pthread_mutex_lock(&mutex->lock);
176 if (!mutex->value && mutex->waiters)
178 mutex->value++;
179 pthread_mutex_unlock(&mutex->lock);
182 pthread_cond_signal(&mutex->cond);