1dcd56943aa5cfa776549d26804a6a018d9b3462
[TD_SR.git] / TD1 / exo3 / deadlock.txt
1 Trace deadlock avec deux consommateurs, deux producteurs et un tampon de taille 1.
2
3 Buffer vide -> C1 et C2 sont en attente (suspendus).
4 -> P1 rentre en section critique, depose et notifie un thread, mettons P2
5 Buffer plein -> P1 se met en attente, P2 a été notifié mais le buffer est plein, donc
6 P2 en attente.
7 -> donc C1, C2, P1, P2 sont en attente
8 et aucune notification ne sera faite pour les réveiller.
9 -> deadlock.
10
11 Solution: faire un notifyAll() en sortie de SC dans le buffer pour s'assurer que un
12 thread d'un type différent du type courant sortant du moniteur est notifié
13 (Consommateur -> Producteur ou Producteur -> Consommateur) et sort de son attente.