Information Technology Reference
In-Depth Information
Acquisition
Exécution
Impression
mess : message;
i : index :
mess, res : message;
j, k : index :
mess : message;
l : index :
=
0;
=
0;
=
0;
début
boucle
début
boucle
début
boucle
enregistrer_travail(mess);
P(mvide);
P(mplein);
mess
P(nplein);
mess
=
requete(j);
=
avis(l);
requete(i)
=
mess;
j
1 mod m;
V(mvide);
=
j
+
l
1 mod n;
V(nvide);
=
l
+
i
=
i
+
1 mod m;
V(mplein);
fin boucle
exécuter_travail(mess, res);
P(nvide);
imprimer_resultat(mess);
fin boucle
fin
avis(k)
=
res;
fin
k
=
k
+
1 mod n;
V(nplein);
fin boucle
fin
2. Il faut maintenant gérer les accès concurrents aux tampons avis et requête. En effet :
- les différents processus Acquisition se partagent l'index i;
- les différents processus Exécution se partagent l'index j et k ;
- les différents processus Impression se partagent l'index k.
Les variables i, j, k, l sont maintenant globales et les accès à ces variables doivent
se faire en exclusion mutuelle. On ajoute donc quatre sémaphores d'exclusion
mutuelle initialisés à 1 (un sémaphore par index).
déclarations globales :
requête : tampon (0..m - 1) de messages;
avis : tampon (0..n - 1) de messages;
m, n : entier;
i, j, k, l : index sur les tampons;
mvide, nvide, mplein, nplein, muti, mutj, mutk, mutl : sémaphores;
début
init(mvide, m); init (nvide, n); init(mplein, 0); init(nplein, 0);
init(muti, 1); init(mutj, 1); init(mutk, 1); init(mutl, 1);
i = j = k = l = 0;
Search WWH ::




Custom Search