Bonjour ,
je souhaite synchroniser deux méthodes jeton? et receive_jeton via une ou deux threads , voici ma solution :

pourriez-vous me donnez vos critiques ?

merci d'avance .

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
int Semaphore::sem1= 0;                 
int Semaphore::sem2 = 0;
***********************************************************
thread 1
sem2.v()
jeton?(){
get =1
while (i == vide ) {
 
}
sem1.p()
recieve_jeton(){
receive() 
if(get == 1){
	i = 1}
	else {
	envoyer jeton ()
	}
********************************************************************
thread 2	
pdisp() {
 
sem1.v()
jeton?(){
lock 
{s.cpt <- s.cpt - 1 }
si s.cpt >= 0 alors 
	{s.f //ajouter ce processus à la file 
	bloquer ce processus
	} 
}
unlock 	
}
vdisp(){
sem2.p()
lock 
s.cpt <- s.cpt + 1 
Si s.cpt =< 0 //existe un process en attente de jeton dans la file 
{
 retirer le processus de s.f
 P-> etat = pret 
 s.cpt = s.cpt - 1 // donner jeton
}
 
unlock
}