#include <pthread.h>
#endif
+
+/**
+ * Compiler TLS.
+ *
+ * See also:
+ * - http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Thread_002dLocal.html
+ * - http://msdn.microsoft.com/en-us/library/9w1sdazb.aspx
+ */
+#if defined(_MSC_VER)
+# define thread_specific __declspec(thread)
+#elif defined(__GNUC__)
+# define thread_specific __thread
+#else
+# define thread_specific
+# error "Unsupported compiler"
+#endif
+
+
namespace os {
typedef pthread_t native_handle_type;
#endif
+ inline
+ thread() :
+ _native_handle(0)
+ {
+ }
+
+ inline
+ thread(thread &other) :
+ _native_handle(other._native_handle)
+ {
+ }
+
template< class Function, class Arg >
- explicit thread( Function& f, Arg & arg ) {
+ explicit thread( Function& f, Arg arg ) {
#ifdef _WIN32
/* FIXME */
DWORD id = 0;
_native_handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f, (LPVOID)arg, 0, &id);
#else
- pthread_create(&_native_handle, NULL, f, arg);
+ pthread_create(&_native_handle, NULL, ( void *(*) (void *))f, arg);
#endif
}
+ inline bool
+ joinable(void) const {
+ return _native_handle != 0;
+ }
+
inline void
join() {
#ifdef _WIN32