Salut tout le monde,
Voila je vous écrit, car je rencontre quelques difficulté avec le problème / Code, suivant:
Le principe est hérité des chemins de fer.
Lorsque le sémaphore est levé, le processus P peut continué
son chemin, lorsqu'il est baissé il doit attendre jusqu'a
ce qu'un autre processus Q le lève.
Dans ce modèle il existe trois primitives:
- Lever(c) fait passer le sémaphore c de la valeur "Baissé" à "Levé"
- Baisser(c) fait passer le sémaphore c de la valeur "Levé" à "Baissé"
- Flag(c) retourne vrai si le sémaphore c est baissé.
Le principe est le transfert de résultat au moyen d'un tampon.
Le fonctionnement est le suivant:
Processus P
Baisser(e);
While (Calculs à faire){
calculs des éléments du tampon(a);
baisser(e);
if (flag(f)) {
attendre(f);
}
écrire tampon (a);
lever(e);
Processus Q
Lever(f);
While (élément à transférer) {
if (flag(e)) {
attendre(e)
}
baisser(f);
lire tampon(a);
lever(f);
}
Personnellement je traduis ce pseudo code C de la manière suivante :
Processus P
Lorsque le sémaphore est levé, P peut continué son chemin.
Lorsqu’il est baissé, il doit attendre que Q ce leve.
On baisse P
Pendant qu’il calcul les éléments du tampon (a)
Si Q est baissé on attend
Sinon
On écrit dans le tampon
Et on lève P.
Processus Q
On lève Q
Pendant qu’ils transfert les éléments
Si P est baisser
On attend
Baisser Q
Lire le tampon (a)
Lever (f)
Voila je bloque sur la traduction de ce pseudo code C depuis quelques jours, c’est pourquoi je poste sur ce forum.
J’aimerais bien aussi vous posez trois petite question svp.
Ma traduction est-elle bonne ?
E correspond à P, et f correspond à Q. C’est ça ?
En ce qui concerne la primitive suivante :
- Flag(c) retourne vrai si le sémaphore c est baissé.
Que veut elle vraiment dire ?
Je vous remercie d’avance pour votre aide, ça serait vraiment gentil.
J'espere avoir poster sur le bon forum sinon je m'en excuse d'avance.
Je m’excuse pour les éventuels fautes d’orthographe, je suis pas très forte …
A bientôt.