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:

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();
}
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.

J'avais bien tente de mettre un en debut de traitement de l'ecrivain, mais... rien :-/

Merci d'avance pour une possible aide