summaryrefslogtreecommitdiff
path: root/libddekit/include/ddekit/lock.h
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2012-02-19 06:14:24 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2012-02-19 06:14:24 +0000
commit6fafeb146e9efd59140ea58cebd7dd38ae9a6379 (patch)
tree7db89ba6a28932514b105d620bba4884ec332ec3 /libddekit/include/ddekit/lock.h
parent38c2c2458e3f4ecb329ff35621806252aac209b9 (diff)
parent8df772b3c665e663f6f9d2a70f9c691590bd3f91 (diff)
Merge branch 'dde' into upstream-merged
Diffstat (limited to 'libddekit/include/ddekit/lock.h')
-rw-r--r--libddekit/include/ddekit/lock.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/libddekit/include/ddekit/lock.h b/libddekit/include/ddekit/lock.h
new file mode 100644
index 00000000..dd398b38
--- /dev/null
+++ b/libddekit/include/ddekit/lock.h
@@ -0,0 +1,83 @@
+#ifndef _ddekit_lock_h
+#define _ddekit_lock_h
+
+struct ddekit_lock;
+
+/** Initialize a DDEKit lock.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+void _ddekit_lock_init (struct ddekit_lock **mtx);
+
+/** Uninitialize a DDEKit lock.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+void _ddekit_lock_deinit (struct ddekit_lock **mtx);
+
+/** Acquire a lock.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+void _ddekit_lock_lock (struct ddekit_lock **mtx);
+
+/** Acquire a lock, non-blocking.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+int _ddekit_lock_try_lock(struct ddekit_lock **mtx);
+
+/** Unlock function.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+void _ddekit_lock_unlock (struct ddekit_lock **mtx);
+
+/** Get lock owner.
+ *
+ * \ingroup DDEKit_synchronization
+ */
+int _ddekit_lock_owner(struct ddekit_lock **mtx);
+
+// definition of ddekit_lock_t
+typedef struct ddekit_lock *ddekit_lock_t;
+
+// common prototypes
+static void ddekit_lock_init_locked(ddekit_lock_t *mtx);
+static void ddekit_lock_init_unlocked(ddekit_lock_t *mtx);
+#define ddekit_lock_init ddekit_lock_init_unlocked
+static void ddekit_lock_deinit (ddekit_lock_t *mtx);
+static void ddekit_lock_lock (ddekit_lock_t *mtx);
+static int ddekit_lock_try_lock(ddekit_lock_t *mtx); // returns 0 on success, != 0 if it would block
+static void ddekit_lock_unlock (ddekit_lock_t *mtx);
+
+// inline implementation or inline call to non-inline implementation
+#include "ddekit/inline.h"
+
+static INLINE void ddekit_lock_init_unlocked(ddekit_lock_t *mtx) {
+ _ddekit_lock_init(mtx);
+}
+
+static INLINE void ddekit_lock_init_locked(ddekit_lock_t *mtx) {
+ _ddekit_lock_init(mtx);
+ _ddekit_lock_lock(mtx);
+}
+
+static INLINE void ddekit_lock_deinit(ddekit_lock_t *mtx) {
+ _ddekit_lock_deinit(mtx);
+}
+static INLINE void ddekit_lock_lock(ddekit_lock_t *mtx) {
+ _ddekit_lock_lock(mtx);
+}
+static INLINE int ddekit_lock_try_lock(ddekit_lock_t *mtx) {
+ return _ddekit_lock_try_lock(mtx);
+}
+static INLINE void ddekit_lock_unlock(ddekit_lock_t *mtx) {
+ _ddekit_lock_unlock(mtx);
+}
+
+static INLINE int ddekit_lock_owner(ddekit_lock_t *mtx) {
+ return _ddekit_lock_owner(mtx);
+}
+
+#endif