00001 00004 #ifndef _THREAD_H 00005 #define _THREAD_H 00006 #include "contextswitch.h" 00007 #include "list.h" 00008 00009 00014 typedef void* (*FredRunnable)(void*); 00015 00019 typedef struct FredThreadDesc* FredThread; 00020 00030 typedef FredList FredQueue; 00031 00041 #define FredTHREAD_NIL (FredThread)NIL 00042 00043 00057 #define FredQueueGetFirst(Q) (FredThread)FredListGetFirst((FredList*)Q) 00058 00074 #define FredQueuePutLast(Q,th) FredListPutLast((FredList*)Q,(FredCell*)th) 00075 00076 00088 #define FredQueueEmpty(Q) FredListEmpty((FredList*)Q) 00089 00090 00103 #define FredQueueInit(Q) FredListInit((FredList*)Q); 00104 00116 #define FredMutexOn() FredMaskOn() 00117 00129 #define FredMutexOff() FredMaskOff() 00130 00131 /************************************************************************* 00132 * suspension du thread actif dans une file 00133 * 00134 * DOIT ETRE FAIT MASQUE 00135 **************************************************************************/ 00136 extern void FredThreadSuspend( FredQueue* q); 00137 00138 00139 /************************************************************************* 00140 * réveil du premier thread suspendu dans une file 00141 * On le met dans la file des prêts 00142 * DOIT ETRE FAIT MASQUE 00143 **************************************************************************/ 00144 extern void FredThreadWakeUp( FredQueue* q); 00145 00146 00147 /************************************************************** 00148 * création & initialisation & lancement d'un thread 00149 **************************************************************/ 00150 extern FredThread FredThreadSpawn( 00151 int StackSize, 00152 void * ( *function)(void*), 00153 void *arg, 00154 void ** resref); 00155 /************************************************************** 00156 * pour terminer le thread de facon forcee 00157 *****************************************************************/ 00158 extern void FredThreadExit(void *); 00159 00160 /************************************************************************* 00161 * Le thread actif passe la main à un thread prêt 00162 **************************************************************************/ 00163 extern void FredThreadYield( ); 00164 /************************************************************** 00165 * pour recuperer le numero du thread actif 00166 ****************************************************************/ 00167 extern FredThread FredThreadCurrent(); 00168 00169 00170 /************************************************************** 00171 * Initialisation du noyau de gestion de Threads 00172 **************************************************************/ 00173 extern void FredInitialize(); 00174 /************************************************************** 00175 * Terminaison du noyau de gestion de Threads 00176 **************************************************************/ 00177 extern void FredWaitTerminate(); 00178 /************************************************************** 00179 * Terminaison brutale du noyau de gestion de Threads 00180 **************************************************************/ 00181 extern void FredAbort(char *); 00182 00183 #endif