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 }
|
1.2.17