1 /* -----------------------------------------------------------------------------
2 * $Id: SchedAPI.h,v 1.15 2002/06/19 20:45:17 sof Exp $
4 * (c) The GHC Team 1998
6 * External API for the scheduler. For most uses, the functions in
7 * RtsAPI.h should be enough.
9 * ---------------------------------------------------------------------------*/
15 // Dummy def for NO_PRI if not in GranSim
19 extern SchedulerStatus waitThread(StgTSO *main_thread, /*out*/StgClosure **ret);
25 extern StgTSO *createThread(nat stack_size, StgInt pri);
27 extern StgTSO *createThread(nat stack_size);
29 #if defined(PAR) || defined(SMP)
30 extern void taskStart(void);
32 extern void scheduleThread(StgTSO *tso);
33 extern SchedulerStatus scheduleWaitThread(StgTSO *tso, /*out*/HaskellObj* ret);
35 static inline void pushClosure (StgTSO *tso, StgClosure *c) {
40 static inline void pushRealWorld (StgTSO *tso) {
42 tso->sp[0] = (W_) REALWORLD_TAG;
44 static inline StgTSO *
45 createGenThread(nat stack_size, StgClosure *closure) {
48 t = createThread(stack_size, NO_PRI);
50 t = createThread(stack_size);
52 pushClosure(t,closure);
56 static inline StgTSO *
57 createIOThread(nat stack_size, StgClosure *closure) {
60 t = createThread(stack_size, NO_PRI);
62 t = createThread(stack_size);
65 pushClosure(t,closure);
70 * Same as above, but also evaluate the result of the IO action
71 * to whnf while we're at it.
74 static inline StgTSO *
75 createStrictIOThread(nat stack_size, StgClosure *closure) {
78 t = createThread(stack_size, NO_PRI);
80 t = createThread(stack_size);
82 pushClosure(t,closure);
83 pushClosure(t,(StgClosure*)&stg_forceIO_closure);
91 extern void deleteThread(StgTSO *tso);
92 extern void deleteAllThreads ( void );
93 extern int howManyThreadsAvail ( void );
95 * Run until there are no more threads.
97 extern void finishAllThreads ( void );
102 extern void RevertCAFs ( void );