Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.20 KB | None | 0 0
  1. // On suppose également l’existence des primitives lire() et ecrire() qui // imposent les
  2. // contraintes suivantes : un appel à la fonction lire peut être effectué // en parallèle avec d’autres
  3. // appels à lire, mais un appel à la fonction ecrire doit être effectué en // exclusion mutuelle de
  4. // tout autre appel à ecrire ou à lire.
  5.  
  6. // version avec redacteur privilégiés: si un rédacteur est là
  7. // ceux qui étaient en train de lire terminent et aucun
  8. // lecteur supplémentaire ne s'ajoute (c'est
  9. // là même chose que la version avec "sas" en mutexs).
  10.  
  11. variables:
  12. mutex m;
  13. cond c;
  14. int nb_lec;
  15. int nb_red;
  16.  
  17. lecteur
  18. {
  19. mutex_lock (&m);
  20.   while (nb_red > 0)
  21.     cond_wait (&c,&m);
  22.   ++nb_lec;  // APRES le while (c'est là qu'est le secret!)
  23. mutex_unlock (&m);
  24.  
  25. lecture ();
  26.  
  27. mutex_lock (&m);
  28. --nb_lec;
  29. cond_signal (&c); // ou bien cond_bcast (&c),
  30.                      les deux marchent.
  31. mutex_unlock (&m);
  32. }
  33.  
  34. redacteur
  35. {
  36.   mutex_lock (&m);
  37.   ++nb_red;  // AVANT le while
  38.   while (nb_lec > 0)
  39.     cond_wait (&c, &m);
  40.  
  41.   écrire ();
  42.  
  43.   --nb_red;
  44.   cond_signal (&c);  // ou bien cond_bcast (&c)
  45.                         les deux marchent
  46.   mutex_unlock (&m);
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement