Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // On suppose également l’existence des primitives lire() et ecrire() qui // imposent les
- // contraintes suivantes : un appel à la fonction lire peut être effectué // en parallèle avec d’autres
- // appels à lire, mais un appel à la fonction ecrire doit être effectué en // exclusion mutuelle de
- // tout autre appel à ecrire ou à lire.
- // version avec redacteur privilégiés: si un rédacteur est là
- // ceux qui étaient en train de lire terminent et aucun
- // lecteur supplémentaire ne s'ajoute (c'est
- // là même chose que la version avec "sas" en mutexs).
- variables:
- mutex m;
- cond c;
- int nb_lec;
- int nb_red;
- lecteur
- {
- mutex_lock (&m);
- while (nb_red > 0)
- cond_wait (&c,&m);
- ++nb_lec; // APRES le while (c'est là qu'est le secret!)
- mutex_unlock (&m);
- lecture ();
- mutex_lock (&m);
- --nb_lec;
- cond_signal (&c); // ou bien cond_bcast (&c),
- les deux marchent.
- mutex_unlock (&m);
- }
- redacteur
- {
- mutex_lock (&m);
- ++nb_red; // AVANT le while
- while (nb_lec > 0)
- cond_wait (&c, &m);
- écrire ();
- --nb_red;
- cond_signal (&c); // ou bien cond_bcast (&c)
- les deux marchent
- mutex_unlock (&m);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement