X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FSchedAPI.h;h=565ed202319bb0481082d01c1459fb49ca9403ac;hb=3ccd3959a9b8712f67bf068be04b4deab6443f5e;hp=014f906e3440c1b9e8c74fb86317ba2e8d7c5922;hpb=64b08aae7989c2a26a0981df5ca6c3e30b49aee1;p=ghc-hetmet.git diff --git a/ghc/includes/SchedAPI.h b/ghc/includes/SchedAPI.h index 014f906..565ed20 100644 --- a/ghc/includes/SchedAPI.h +++ b/ghc/includes/SchedAPI.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: SchedAPI.h,v 1.4 1999/06/03 08:09:31 sof Exp $ + * $Id: SchedAPI.h,v 1.15 2002/06/19 20:45:17 sof Exp $ * * (c) The GHC Team 1998 * @@ -11,25 +11,26 @@ #ifndef SCHEDAPI_H #define SCHEDAPI_H -/* - * Running the scheduler - */ +#if defined(GRAN) +// Dummy def for NO_PRI if not in GranSim +#define NO_PRI 0 +#endif -typedef enum { - Success, - Killed, /* another thread killed us */ - Interrupted, /* stopped in response to a call to interruptStgRts */ - Deadlock, - AllBlocked, /* subtly different from Deadlock */ -} SchedulerStatus; - -SchedulerStatus schedule(StgTSO *main_thread, /*out*/StgClosure **ret); +extern SchedulerStatus waitThread(StgTSO *main_thread, /*out*/StgClosure **ret); /* * Creating threads */ - -StgTSO *createThread (nat stack_size); +#if defined(GRAN) +extern StgTSO *createThread(nat stack_size, StgInt pri); +#else +extern StgTSO *createThread(nat stack_size); +#endif +#if defined(PAR) || defined(SMP) +extern void taskStart(void); +#endif +extern void scheduleThread(StgTSO *tso); +extern SchedulerStatus scheduleWaitThread(StgTSO *tso, /*out*/HaskellObj* ret); static inline void pushClosure (StgTSO *tso, StgClosure *c) { tso->sp--; @@ -43,7 +44,11 @@ static inline void pushRealWorld (StgTSO *tso) { static inline StgTSO * createGenThread(nat stack_size, StgClosure *closure) { StgTSO *t; +#if defined(GRAN) + t = createThread(stack_size, NO_PRI); +#else t = createThread(stack_size); +#endif pushClosure(t,closure); return t; } @@ -51,7 +56,11 @@ createGenThread(nat stack_size, StgClosure *closure) { static inline StgTSO * createIOThread(nat stack_size, StgClosure *closure) { StgTSO *t; +#if defined(GRAN) + t = createThread(stack_size, NO_PRI); +#else t = createThread(stack_size); +#endif pushRealWorld(t); pushClosure(t,closure); return t; @@ -65,9 +74,13 @@ createIOThread(nat stack_size, StgClosure *closure) { static inline StgTSO * createStrictIOThread(nat stack_size, StgClosure *closure) { StgTSO *t; +#if defined(GRAN) + t = createThread(stack_size, NO_PRI); +#else t = createThread(stack_size); +#endif pushClosure(t,closure); - pushClosure(t,(StgClosure*)&forceIO_closure); + pushClosure(t,(StgClosure*)&stg_forceIO_closure); return t; } @@ -75,13 +88,17 @@ createStrictIOThread(nat stack_size, StgClosure *closure) { /* * Killing threads */ - -void deleteThread(StgTSO *tso); +extern void deleteThread(StgTSO *tso); +extern void deleteAllThreads ( void ); +extern int howManyThreadsAvail ( void ); +/* + * Run until there are no more threads. + */ +extern void finishAllThreads ( void ); /* * Reverting CAFs */ - -void RevertCAFs(void); +extern void RevertCAFs ( void ); #endif