summaryrefslogtreecommitdiffstats
path: root/include/c11/threads.h
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2013-03-12 10:37:46 +0000
committerJosé Fonseca <[email protected]>2014-01-23 12:55:55 +0000
commitecaa81bd9648131e01f9ad4fd9d185370df8e872 (patch)
tree9c71722d8a20faf648c52775cd80fabf8c4b40f9 /include/c11/threads.h
parent349f0a94aeaded3125d5c7f31ae2092f1b4a5727 (diff)
c11: Import threads.h emulation library.
Implementation is based of https://gist.github.com/2223710 with the following modifications: - inline implementatation - retain XP compatability - add temporary hack for static mutex initializers (as they are not part of the stack but still widely used internally) - make TIME_UTC a conditional macro (some system headers already define it, so this prevents conflict) - respect HAVE_PTHREAD macro Reviewed-by: Brian Paul <[email protected]> Acked-by: Ian Romanick <[email protected]> Acked-by: Chad Versace <[email protected]>
Diffstat (limited to 'include/c11/threads.h')
-rw-r--r--include/c11/threads.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/include/c11/threads.h b/include/c11/threads.h
new file mode 100644
index 00000000000..4bb78b6500d
--- /dev/null
+++ b/include/c11/threads.h
@@ -0,0 +1,58 @@
+/*
+ * C11 <threads.h> emulation library
+ *
+ * (C) Copyright yohhoy 2012.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See copy at http://www.boost.org/LICENSE_1_0.txt)
+ */
+#ifndef EMULATED_THREADS_H_INCLUDED_
+#define EMULATED_THREADS_H_INCLUDED_
+
+#include <time.h>
+
+#ifndef TIME_UTC
+#define TIME_UTC 1
+#endif
+
+#include "c99_compat.h" /* for `inline` */
+
+/*---------------------------- types ----------------------------*/
+typedef void (*tss_dtor_t)(void*);
+typedef int (*thrd_start_t)(void*);
+
+struct xtime {
+ time_t sec;
+ long nsec;
+};
+typedef struct xtime xtime;
+
+
+/*-------------------- enumeration constants --------------------*/
+enum {
+ mtx_plain = 0,
+ mtx_try = 1,
+ mtx_timed = 2,
+ mtx_recursive = 4
+};
+
+enum {
+ thrd_success = 0, // succeeded
+ thrd_timeout, // timeout
+ thrd_error, // failed
+ thrd_busy, // resource busy
+ thrd_nomem // out of memory
+};
+
+/*-------------------------- functions --------------------------*/
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#include "threads_win32.h"
+#elif defined(HAVE_PTHREAD)
+#include "threads_posix.h"
+#else
+#error Not supported on this platform.
+#endif
+
+
+
+#endif /* EMULATED_THREADS_H_INCLUDED_ */