Information Technology Reference
In-Depth Information
mémoire commune, c'est-à-dire qu'il effectue des accès en exclusion mutuelle des
autres rédacteurs et des lecteurs. L'accès du processus rédacteur peut donc être géré
selon le schéma d'exclusion mutuelle vu précédemment, en utilisant un sémaphore
appelé ici acces et initialisé à 1.
REDACTEUR
init (acces, 1);
m'assurer que l'accès au fichier est libre : P(acces);
entrer en écriture
libérer l'accès au fichier :
V(acces);
Le lecteur
Un lecteur exclut les rédacteurs mais pas les autres lecteurs. Seul le premier lecteur
doit donc s'assurer qu'il n'y a pas d'accès en écriture en cours. Par ailleurs, seul le
dernier lecteur doit libérer la ressource et réveiller un éventuel rédacteur.
Il faut en conséquence compter le nombre de lecteurs qui accèdent au fichier ou à
la zone de mémoire partagée. On utilise pour cela une variable nl, initialisée à 0.
Cette variable nl est accédée en concurrence par tous les lecteurs qui vont soit incré-
menter cette variable (un lecteur de plus), soit la décrémenter (un lecteur de moins).
Pour que le contenu de la variable reste cohérent, il faut que nl soit accédée en exclu-
sion mutuelle par tous les lecteurs. L'accès à la variable est donc gardé par un séma-
phore mutex initialisé à 1.
LECTEUR
-- accès à nl pour compter un lecteur de plus
P(mutex);
nl : = nl + 1;
si (nl
=
1)
alors
-- je suis le premier lecteur; je me place en exclusion mutuelle
d'un rédacteur éventuel
P(acces);
fsi
V(Mutex);
accès en lecture
-- accès à nl pour compter un lecteur de moins
P(mutex);
nl : = nl - 1;
si (nl = 0)
alors
-- je suis le dernier lecteur; je libère la ressource et je réveille
d'un rédacteur éventuel en attente
V(acces);
fsi
V(mutex);
Search WWH ::




Custom Search