Bonjour,
Après avoir implémenté l'algo du producteur consommateur pour la communication entre deux processus avec les semaphores (pas IPC V) le consommateur reste bloqué
dès le début au niveau de :
if(sem_wait(&plein))
Il reste bloqué car sem_t plein a été initialisé à 0. Les sempahores sont dans une memoire partagée.
Pour éviter le bloquage du consommateur je dois créer un boolen dans le shm : bool peux_lire
Vue que les deux processus tourne en même temps, dès que le producteur a fini de remplir le buffer avec au moins une production il met le boolen à true
pendant ce temps le consommateur attendait dans sa fonction lire :
shm-> n c'est le nombre de donnée écrite dans le buffer du shm.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 lire_depuis(shared_memory* shm) { do { while(!peux_lire); if(sem_wait (&plein)) ==-1)... etc //algo classique } while(shm-> n > 0); //au moins une production à lire.
Est-ce normal que je dois utiliser une telle boucle (while(! peux_lire))
pour le consommateur.
ou alors je dois utiliser sleep(1) juste avant la fonction lire_dans(shm)
pour que le producteur ait eu le temps.
Mais cette dernière solution ne respecte pas la règle des semaphores comme quoi on doit faire des suppositions sur la vitesse des processus.
Merci
Partager