diff options
author | José Fonseca <[email protected]> | 2013-03-12 10:37:46 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2014-01-23 12:55:55 +0000 |
commit | ecaa81bd9648131e01f9ad4fd9d185370df8e872 (patch) | |
tree | 9c71722d8a20faf648c52775cd80fabf8c4b40f9 /include/c11/threads.h | |
parent | 349f0a94aeaded3125d5c7f31ae2092f1b4a5727 (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.h | 58 |
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_ */ |