Définitions des macros | |
#define | FredQueueGetFirst(Q) (FredThread)FredListGetFirst((FredList*)Q) |
Retirer le premier thread d'une file d'attente. | |
#define | FredQueuePutLast(Q, th) FredListPutLast((FredList*)Q,(FredCell*)th) |
Insérer un thread déja bloqué dans une file d'attente. | |
#define | FredQueueEmpty(Q) FredListEmpty((FredList*)Q) |
Tester une queue à vide de threads. | |
#define | FredQueueInit(Q) FredListInit((FredList*)Q); |
Initialiser une queue vide de threads. | |
Fonctions | |
void | FredThreadSuspend (FredQueue *q) |
Suspendre le thread courant dans une file. | |
void | FredThreadWakeUp (FredQueue *q) |
Réveille un thread bloqué. |
Pour savoir comment l'utiliser, voir File d'attente , Un exemple d'outil de synchronisation : le sémaphore et Les N philosophes
|
Implantation C'est un simple alias du test de liste vide, les conversions de type en sus. |
|
Implantation C'est un simple alias du retrait de liste, les conversions de type en sus. |
|
Implantation C'est un simple alias de l'initialisation de liste , les conversions de type en sus. |
|
Implantation C'est un simple alias de l'insertion de liste, les conversions de type en sus. |
|
Implantation On doit arrêter puis relancer un décomptage.
00281 { 00282 FredThread old; 00283 current->err=errno; /* sauver errno */ 00284 FredCountDownStop(); /* Arrêt décompeur */ 00285 /* le courant se en queue de la file q */ 00286 FredQueuePutLast(q,current); 00287 /* 00288 on choisit un nouveau courant : on doit garantir 00289 que la file readyQ n'est jamais vide : C'est le rôle 00290 du watchdog 00291 */ 00292 old=current; current=FredQueueGetFirst(&readyQ); 00293 FredContextSwitch(old->ctx,current->ctx); 00294 /* 00295 on reviendra ici lors de son réveil : 00296 on relance le décomptage du quantum 00297 */ 00298 FredCountDownStart(quantum); 00299 errno=current->err;/* restaurer errno */ 00300 } |
|
Implantation
00319 { 00320 if(!FredQueueEmpty(q))FredQueuePutLast(&readyQ,FredQueueGetFirst(q)); 00321 } |