X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fincludes%2FSchedAPI.h;h=05d3ca859966923383a2651ba872420b04ac3523;hb=f1080bc82f87317ffa59cffef08b322d7354bb29;hp=014f906e3440c1b9e8c74fb86317ba2e8d7c5922;hpb=64b08aae7989c2a26a0981df5ca6c3e30b49aee1;p=ghc-hetmet.git diff --git a/ghc/includes/SchedAPI.h b/ghc/includes/SchedAPI.h index 014f906..05d3ca8 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.10 2000/04/14 15:18:05 sewardj Exp $ * * (c) The GHC Team 1998 * @@ -11,25 +11,28 @@ #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); +/* + * schedule() plus the thread creation functions are not part + * part of the external RTS API, so leave them out if we're + * not compiling rts/ bits. -- sof 7/99 + * + */ +SchedulerStatus waitThread(StgTSO *main_thread, /*out*/StgClosure **ret); /* * Creating threads */ - -StgTSO *createThread (nat stack_size); +#if defined(GRAN) +StgTSO *createThread(nat stack_size, StgInt pri); +#else +StgTSO *createThread(nat stack_size); +#endif +void scheduleThread(StgTSO *tso); static inline void pushClosure (StgTSO *tso, StgClosure *c) { tso->sp--; @@ -43,7 +46,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 +58,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,7 +76,11 @@ 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); return t; @@ -75,13 +90,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