First work on threaded version.
[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 YAZ_END_CDECL
37 #endif