[project @ 2002-01-31 23:04:15 by sof]
[ghc-hetmet.git] / ghc / rts / OSThreads.h
1 /* ---------------------------------------------------------------------------
2  *
3  * (c) The GHC Team, 2001
4  *
5  * Accessing OS threads functionality in a (mostly) OS-independent
6  * manner. 
7  *
8  * 
9  * --------------------------------------------------------------------------*/
10 #ifndef __OSTHREADS_H__
11 #define __OSTHREADS_H__
12 #if defined(RTS_SUPPORTS_THREADS) /*to the end */
13
14 #if defined(HAVE_PTHREAD_H) && !defined(WANT_NATIVE_WIN32_THREADS)
15 #include <pthread.h>
16 typedef pthread_cond_t  CondVar;
17 typedef pthread_mutex_t MutexVar;
18 typedef pthread_t       OSThreadId;
19
20 #define INIT_MUTEX_VAR  PTHREAD_MUTEX_INITIALIZER
21 #define INIT_COND_VAR   PTHREAD_COND_INITIALIZER
22 #elif defined(HAVE_WINDOWS_H)
23 #include <windows.h>
24 typedef HANDLE CondVar;
25 typedef HANDLE MutexVar;
26 typedef DWORD OSThreadId;
27
28 #define INIT_MUTEX_VAR 0
29 #define INIT_COND_VAR  0
30 #else
31 #error "Threads not supported"
32 #endif
33
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);
39
40 extern OSThreadId osThreadId(void);
41 extern void shutdownThread(void);
42 extern int  createOSThread ( OSThreadId* tid, void *(*startProc)(void*));
43
44 extern void initMutexVar ( MutexVar* pMut );
45
46 #endif /* defined(RTS_SUPPORTS_THREADS) */
47
48 #endif /* __OSTHREADS_H__ */