Page principale   Modules   Liste des composants   Liste des fichiers   Composants   Déclarations  

Interface de gestion de file d'attente
[Interface FRED]

Ce module définit comment bloquer ou réveiller un thread dans une file d'attente. Plus de détails...

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é.


Description détaillée

Pour savoir comment l'utiliser, voir File d'attente , Un exemple d'outil de synchronisation : le sémaphore et Les N philosophes


Documentation de la macro

#define FredQueueEmpty      FredListEmpty((FredList*)Q)
 

Paramètres:
Q  queue
Renvoie :
1 si vide. 0 sinon


Implantation

C'est un simple alias du test de liste vide, les conversions de type en sus.

#define FredQueueGetFirst      (FredThread)FredListGetFirst((FredList*)Q)
 

Paramètres:
Q  FredQueue où mettre le thread courant
Renvoie :
le premier thread de la file ou 0 si file vide
Avertissement:
Cette procédure n'est utilisable qu'au sein d'une section en exclusion mutuelle.


Implantation

C'est un simple alias du retrait de liste, les conversions de type en sus.

#define FredQueueInit      FredListInit((FredList*)Q);
 

Paramètres:
Q  queue vide


Implantation

C'est un simple alias de l'initialisation de liste , les conversions de type en sus.

#define FredQueuePutLast Q,
th       FredListPutLast((FredList*)Q,(FredCell*)th)
 

Paramètres:
Q  FredQueue où mettre le thread bloqué
th  le thread bloqué à insérer en queue
Avertissement:
Cette procédure n'est utilisable qu'au sein d'une section en exclusion mutuelle.


Implantation

C'est un simple alias de l'insertion de liste, les conversions de type en sus.


Documentation de la fonction

void FredThreadSuspend FredQueue   q
 

Paramètres:
q  file où mettre le thread courant
Le thread courant est mis en queue de la file. Un nouveau thread est élu pour s'exécuter.

Avertissement:
Cette procédure n'est utilisable qu'au sein d'une section en exclusion mutuelle.


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 }

void FredThreadWakeUp FredQueue   q
 

Paramètres:
q  queue dont- le premier thread est remis prêt
Le thread réveillé est mis en queue de la file des prêts. C'est une opération nulle si la file est vide.

Avertissement:
Cette procédure n'est utilisable qu'au sein d'une section en exclusion mutuelle.


Implantation

00319 {
00320     if(!FredQueueEmpty(q))FredQueuePutLast(&readyQ,FredQueueGetFirst(q));
00321 }


Généré le Mon Jan 5 16:22:06 2004 par doxygen1.2.17