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

Interface sémaphore

Une implémentation classique du classique sémaphore de Dijkstra. Plus de détails...

Composants

struct  FredSemaphore
 Descripteur du sémaphore. Plus de détails...


Définitions des types

typedef FredSemaphore FredSemaphore
 Descripteur du sémaphore.


Fonctions

void FredSemaphoreInit (FredSemaphore *s, int i)
 Initialise le descripteur de sémaphore.

void FredSemaphoreP (FredSemaphore *s)
 Prend un jeton.

void FredSemaphoreV (FredSemaphore *s)
 Depose un jeton.


Description détaillée


Documentation du type

typedef struct FredSemaphore FredSemaphore
 

Un sémaphore est décrit par un compteur et une file d'attente. La valeur initiale du compteur doit être >= 0



Implantation Le compteur représente le nombre de jetons si le compteur est >=0 et le nombre de threads en attente s'il est <0.


Documentation de la fonction

void FredSemaphoreInit FredSemaphore   s,
int    i
 

Paramètres:
s  adresse descripteur sémaphore
i  nombre initial de jetons
Avertissement:
la valeur initiale du sémaphore doit être positive ou nulle

00012 {
00013   FredMutexOn();/* début d'exclusion mutuelle */
00014   /* le semaphore existe et la valeur initiale est >=0 */
00015   if ((s !=(FredSemaphore *) 0)&&(i>=0)){
00016     s->counter = i;
00017     FredQueueInit(&(s->queue));/* file vide */
00018   }
00019   FredMutexOff();/* fin d'exclusion mutuelle */
00020 }

void FredSemaphoreP FredSemaphore   s
 

Paramètres:
s  adresse descripteur sémaphore
S'il n'y a pas de jeton, le thread se bloque. Il sera réveillé à son tour ( file d'attente FIFO) quand un jeton lui sera donné.



Implantation

00035 {
00036   FredMutexOn();/* début d'exclusion mutuelle */
00037   s->counter--;
00038   if(s->counter < 0){
00039     /* pas de jeton :  on suspend le thread actif   */
00040     FredThreadSuspend(&(s->queue))  ; 
00041   }              
00042   FredMutexOff();/* fin d'exclusion mutuelle */
00043 }

void FredSemaphoreV FredSemaphore   s
 

Paramètres:
s  adresse descripteur sémaphore
S'il y a des threads en attente d'un jeton, on réveille le + ancien.



Implantation

00058 {
00059   FredMutexOn();/* début d'exclusion mutuelle */
00060   s->counter++;
00061   if(s->counter <=0){
00062     /* il y a des demandeurs en attente */
00063     FredThreadWakeUp(&(s->queue));
00064   }
00065   FredMutexOff();/* fin d'exclusion mutuelle */
00066 }


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