01f338db309da799726c8ab0e53739baa0e4c690
[idzebra-moved-to-github.git] / include / zebra-lock.h
1
2 #ifndef ZEBRA_LOCK_H
3 #define ZEBRA_LOCK_H
4
5 #if HAVE_PTHREAD_H
6 #include <pthread.h>
7 #endif
8
9 #include <yaz/yconfig.h>
10
11 YAZ_BEGIN_CDECL
12
13 typedef struct {
14     pthread_mutex_t mutex;
15 } Zebra_mutex;
16
17 YAZ_EXPORT int zebra_mutex_init (Zebra_mutex *p);
18 YAZ_EXPORT int zebra_mutex_destroy (Zebra_mutex *p);
19 YAZ_EXPORT int zebra_mutex_lock (Zebra_mutex *p);
20 YAZ_EXPORT int zebra_mutex_unlock (Zebra_mutex *p);
21
22 typedef struct {
23     int readers_reading;
24     int writers_writing;
25     pthread_mutex_t mutex;
26     pthread_cond_t lock_free;
27 } Zebra_lock_rdwr;
28
29 YAZ_EXPORT int zebra_lock_rdwr_init (Zebra_lock_rdwr *p);
30 YAZ_EXPORT int zebra_lock_rdwr_destroy (Zebra_lock_rdwr *p);
31 YAZ_EXPORT int zebra_lock_rdwr_rlock (Zebra_lock_rdwr *p);
32 YAZ_EXPORT int zebra_lock_rdwr_wlock (Zebra_lock_rdwr *p);
33 YAZ_EXPORT int zebra_lock_rdwr_runlock (Zebra_lock_rdwr *p);
34 YAZ_EXPORT int zebra_lock_rdwr_wunlock (Zebra_lock_rdwr *p);
35
36 typedef struct {
37     pthread_mutex_t mutex;
38     pthread_cond_t cond;
39 } Zebra_mutex_cond;
40
41 YAZ_EXPORT int zebra_mutex_cond_init (Zebra_mutex_cond *p);
42 YAZ_EXPORT int zebra_mutex_cond_destroy (Zebra_mutex_cond *p);
43 YAZ_EXPORT int zebra_mutex_cond_lock (Zebra_mutex_cond *p);
44 YAZ_EXPORT int zebra_mutex_cond_unlock (Zebra_mutex_cond *p);
45 YAZ_EXPORT int zebra_mutex_cond_wait (Zebra_mutex_cond *p);
46 YAZ_EXPORT int zebra_mutex_cond_signal (Zebra_mutex_cond *p);
47
48 YAZ_END_CDECL
49 #endif