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