Add simple thread and mutex wrappers.
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 14 Jan 2011 14:17:55 +0000 (15:17 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 14 Jan 2011 14:17:55 +0000 (15:17 +0100)
src/threads.h [new file with mode: 0644]

diff --git a/src/threads.h b/src/threads.h
new file mode 100644 (file)
index 0000000..3243907
--- /dev/null
@@ -0,0 +1,53 @@
+#ifndef __THREADS_H__
+#define __THREADS_H__
+
+typedef struct event {
+       int foo;
+} event_t;
+       
+
+#ifdef HAVE_MINGW
+typedef HANDLE thread_t;
+typedef CRITICAL_SECTION mutex_t;
+
+static inline bool thread_create(thread_t *tid, void (*func)(void *), void *arg) {
+       *tid = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, arg, 0, NULL);
+       return tid;
+}
+static inline void thread_destroy(thread_t *tid) {
+       WaitForSingleObject(tid, 0);
+       CloseHandle(tid);
+}
+static inline void mutex_create(mutex_t *mutex) {
+       InitializeCriticalSection(mutex);
+}
+static inline void mutex_lock(mutex_t *mutex) {
+       EnterCriticalSection(mutex);
+}
+static inline void mutex_unlock(mutex_t *mutex) {
+       LeaveCriticalSection(mutex);
+}
+#else
+#include <pthread.h>
+
+typedef pthread_t thread_t;
+typedef pthread_mutex_t mutex_t;
+
+static inline void thread_create(thread_t *tid, void (*func)(void *), void *arg) {
+       return !pthread_create(tid, NULL, (void *(*)(void *))func, arg);
+}
+static inline void thread_destroy(thread_t *tid) {
+       pthread_join(tid);
+}
+static inline void mutex_create(mutex_t *mutex) {
+       pthread_mutex_init(mutex, NULL);
+}
+static inline void mutex_lock(mutex_t *mutex) {
+       pthread_mutex_lock(mutex);
+}
+static inline void mutex_unlock(mutex_t *mutex) {
+       pthread_mutex_unlock(mutex);
+}
+#endif
+
+#endif