1 /* ---------------------------------------------------------------------------
3 * (c) The GHC Team, 2001
5 * Accessing OS threads functionality in a (mostly) OS-independent
9 * --------------------------------------------------------------------------*/
10 #ifndef __OSTHREADS_H__
11 #define __OSTHREADS_H__
12 #if defined(RTS_SUPPORTS_THREADS) /*to the end */
14 #if defined(HAVE_PTHREAD_H) && !defined(WANT_NATIVE_WIN32_THREADS)
16 typedef pthread_cond_t CondVar;
17 typedef pthread_mutex_t MutexVar;
18 typedef pthread_t OSThreadId;
20 #define INIT_MUTEX_VAR PTHREAD_MUTEX_INITIALIZER
21 #define INIT_COND_VAR PTHREAD_COND_INITIALIZER
22 #elif defined(HAVE_WINDOWS_H)
24 typedef HANDLE CondVar;
25 typedef HANDLE MutexVar;
26 typedef DWORD OSThreadId;
28 #define INIT_MUTEX_VAR 0
29 #define INIT_COND_VAR 0
31 #error "Threads not supported"
34 extern void initCondVar ( CondVar* pCond );
35 extern void closeCondVar ( CondVar* pCond );
36 extern rtsBool broadcastCondVar (CondVar* pCond );
37 extern rtsBool signalCondVar ( CondVar* pCond );
38 extern rtsBool waitCondVar ( CondVar* pCond, MutexVar* pMut);
40 extern OSThreadId osThreadId(void);
41 extern void shutdownThread(void);
42 extern int createOSThread ( OSThreadId* tid, void *(*startProc)(void*));
44 extern void initMutexVar ( MutexVar* pMut );
46 #endif /* defined(RTS_SUPPORTS_THREADS) */
48 #endif /* __OSTHREADS_H__ */