les joies de la synchro de processus. J'adorais ça quand on en avait a la fac.
A mon avis, pour faire quelque chose d'efficace, il te faut 4 semaphores.
- 1 pour savoir si on peut ecrire dans le tampon A : SemWriteA
- 1 pour savoir si on peut lire dans le tampon A : SemReadA
- 1 pour savoir si on peut ecrire dans le tampon B : SemWriteB
- 1 pour savoir si on peut lire dans le tampon B : SemReadB
et tu fait un truc dans le genre :
initialisation(){
// init a 0 car il n'y a rien a lire pour le moment.
SemReadA.c = SemReadB.c = 0;
// init a 1 car on peut ecrire.
SemWriteA.c = SemWriteB.c = 1;
}
Boucle de P1 :
while(1){
// on attend de pouvoir ecrire
stop(SemWriteA);
// ecrit dans le tampon A
// libre le processus qui attend pour lire
start(SemReadA);
}
Boucle de P2 :
while(1){
// on attend de pouvoir lire
stop(SemReadA);
// lire le contenu du tempon A et le mettre dans une variable temporaire
// permetre de nouveau l'ecriture dans le tampon
start(SemWriteA);
// on attend de pouvoir ecrire dans B
stop(SemWriteB);
// ecrire ce qu'on a lu plus haut dans le tampon B
// permetre la lecture dans B
start(SemReadB);
}
Boucle de P3 :
while(1){
// on attend de pouvoir lire dans le tampon B
stop(SemReadB);
// lire le contenu de B
// permettre d'y ecrire a nouveau
start(SemWriteB);
}
--------------------------------------
j'espere avoir mis assez de commentaire pour que tu puisse comprendre l'idée.
En gros l'idée c'est
- apres avoir lu, il faut permetre d'ecrire
- apres avoir ecrit il faut permetre de lire.
- au debut il n'y a rien d'ecrit don on permet d'ecrire mais pas de lire.