dans le probléme de redacteur/lecteurs,les lecteurs sont prioritaires,de ce fait il existe un risque de famine.prposer une solution qui qui élimine la famine et qui rend les rédacteurs prioritaires sur les lecteurs.en d'autres terme,dés qu'un redacteur réclame l'accés à un fichier(ressource),il doit l'obtenir le plus tot possible.donc tout lecteur arrivé aprés la demande du rédacteur doit attendre,méme si des lecteurs utilsent encore le fichier:
solution:je n'ai utlisé que deux sémaphores mutex(pour proteger une variable comp_redacteur qui va étre consulté par les lecteurs et redacteurs)et redact(y'a pas une simultaniéte entre les redacteurs)
on va proceder par l'algorithme
NB:LES PROCESSUS S'EXéCUTENT EN PARALLéLE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 process redacteur; begin Si un redacteur est en exécution alors se bloquer;{un seul redacteur accéde a la ressource} Sinon compteur_redacteur:=compteur_redacteur+1; ecrire(mettre à jour); compteur_redacteur:=compteu_redacteur-1; Si compteur_redacteur<>0 alors reveiller un redacteur{qui etait dans la fille d'attente} end ; process lecteur; begin Sicompteur_redacteur<>0 Alors ___;{mis dans la file d'attente} Sinon lire(consulter); reveiller un lecteur{un lecteur qui etait dans la file} end ;
ma question
doit on declarer un sémaphore pour le lecteur je me pose cette question car quand un rédacteur arrive il doit absolument utiliser la ressource(prioritaire) méme si un redacteur arrive au méme temps que lui et méme si si y'a des lecteurs qui utilisent cette ressource(car plusieurs lecteurs accédent à la ressource simultanément) donc on doit mettre le lecteur dans une file d'attente mais dans quelle fille????? ça peut pas étre celle des redacteurs!! dans mutex???? mais c juste pour proteger la variable compteur_redacteur.
ALORS voila j'espére que cette fois c'est un peu plus lisible
Partager