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