First work on threaded version.
[idzebra-moved-to-github.git] / include / zebra-lock.h
diff --git a/include/zebra-lock.h b/include/zebra-lock.h
new file mode 100644 (file)
index 0000000..b7d6164
--- /dev/null
@@ -0,0 +1,37 @@
+
+#ifndef ZEBRA_LOCK_H
+#define ZEBRA_LOCK_H
+
+#if HAVE_PTHREAD_H
+#include <pthread.h>
+#endif
+
+#include <yaz/yconfig.h>
+
+YAZ_BEGIN_CDECL
+
+typedef struct {
+    pthread_mutex_t mutex;
+} Zebra_mutex;
+
+YAZ_EXPORT int zebra_mutex_init (Zebra_mutex *p);
+YAZ_EXPORT int zebra_mutex_destroy (Zebra_mutex *p);
+YAZ_EXPORT int zebra_mutex_lock (Zebra_mutex *p);
+YAZ_EXPORT int zebra_mutex_unlock (Zebra_mutex *p);
+
+typedef struct {
+    int readers_reading;
+    int writers_writing;
+    pthread_mutex_t mutex;
+    pthread_cond_t lock_free;
+} Zebra_lock_rdwr;
+
+YAZ_EXPORT int zebra_lock_rdwr_init (Zebra_lock_rdwr *p);
+YAZ_EXPORT int zebra_lock_rdwr_destroy (Zebra_lock_rdwr *p);
+YAZ_EXPORT int zebra_lock_rdwr_rlock (Zebra_lock_rdwr *p);
+YAZ_EXPORT int zebra_lock_rdwr_wlock (Zebra_lock_rdwr *p);
+YAZ_EXPORT int zebra_lock_rdwr_runlock (Zebra_lock_rdwr *p);
+YAZ_EXPORT int zebra_lock_rdwr_wunlock (Zebra_lock_rdwr *p);
+
+YAZ_END_CDECL
+#endif