Synchronisation des threads avec deux sémpahores
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:
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
} |