Bonjour a toutes et a tous,
Je poste ce message car j'ai un petit souci concernant les semaphores, et les exclusions mutuelles pour la programmation concurrente.
Le principe du programme, pour ceux qui ne connaitraient pas ce cas d'ecole, est que plusieurs personnes, des lecteurs et des ecrivains, veulent un acces a un fichier. Un ecrivain qui prend modifie le fichier empeche tous les autres d'y avoir acces. Un lecteur qui commence une lecture bloque tous les ecrivains, mais pas les autres lecteurs arrives au meme moment que lui.
Seulement, il faut modifier le programme pour donner une priorite aux lecteurs sur les ecrivains, et voila mon souci: je ne sais vraiment pas comment m'y prendre. J'ai essaye de rajouter un autre lock, les ecrivains se retrouvent en situation de deadlock, j'ai essaye une boucle sur une variable globale contenant le nombre de lecteurs, mais la meme situation se reproduit...
Quelqu'un aurait il une idee?
Voici le code:
Et voila. En gros, il faut, lorsqu'un ecrivain a fini son traitement, qu'il donne la main a un lecteur si ces derniers sont presents.
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
22
23
24
25
26
27
28
29
30 int readcount = 0 ; Semaphore mutex(1); Semaphore wrt(1); void Lecteur(int no, int duree) { mutex.wait(); readcount = readcount + 1; if (readcount == 1) wrt.wait(); mutex.signal(); TRAITEMENT(no, duree); mutex.wait(); readcount = readcount - 1; if (readcount == 0) wrt.signal(); mutex.signal(); } void Ecrivain( int no, int duree ) { wrt.wait(); TRAITEMENT(no, duree); wrt.signal(); }
J'avais bien tente de mettre unen debut de traitement de l'ecrivain, mais... rien :-/
Code : Sélectionner tout - Visualiser dans une fenêtre à part while(readcount > 0);
Merci d'avance pour une possible aide![]()
Partager