Bonsoir,
D'abord l'écrivain bloque le semaphore disons "peut-écrire" à 0, (précédemment initialisé à 1).
Quand l'écrivain a fini d'écrire dans le segment de mémoire partagé (buffer), il incrémente le sémaphore, disons "peut_lire" à 1 (préalablement initialisé à 0).
Les semaphores sont dans un structes shared_mem, et le lecteur fait appel à une fonction lire_dans_shm(struct shared_mem *shm).
Même chose pour le écrivain mais ecrire_dans_shm(struct shared_mem *shm)
Quand j'affiche la valeur du semaphore "peut_lire" dans la fonction lire_dans_shm (fonction située just avant le exit(EXIT_SUCCES) du lecteur.c) il vaut 0 avant le sem_wait(&peut_lire) alors que comme on vient de le voir il doit valoir 1 (incrémentation de l'écrivain) ... ducou le lecteur reste bloque sur sem_wait(&peut_lire) et n'affiche pas le contenu du buffeur (seciton critique).
Quand l'écrivain a finit d'écrire dans le shm (écrire_dans_shm dans écrivain.c) comment le lecteur intervient pour lire grâce à sa fonction peut_lire_dans_shm dans lecteur.c, à quel moment, ou alors il faut faire appel à autre chose dans le code de l'écrivain pour que les lecteurs se lance (exec) ?
Comment s'est possible que plusieurs lecteur se lance juste parce que on a créer un segment de mémoire partagé, le fait d'y accéder ?
Merci
Partager