TD1: Explain and fix the deadlock in exo3.
[TD_SR.git] / TD1 / exo3 / deadlock.txt
diff --git a/TD1/exo3/deadlock.txt b/TD1/exo3/deadlock.txt
new file mode 100644 (file)
index 0000000..c926496
--- /dev/null
@@ -0,0 +1,13 @@
+Trace deadlock avec deux consommateurs, deux producteurs et un tampon de taille 1.
+
+Buffer vide  -> C1 et C2 sont en attente (suspendus).
+             -> P1 rentre en section critique, depose et notifie un thread, mettons P2
+Buffer plein -> P1 se met en attente, P2 a été notifié mais le buffer est plein, donc
+                P2 en attente.
+             -> donc C1, C2, P1, P2 sont en attente
+                et aucune notification ne sera faite pour les réveiller.
+             -> deadlock.
+
+Solution: faire un notifyAll() en sortie de SC dans le buffer pour s'assurer que un
+          thread d'un type différent du type courant sortant du moniteur est notifié
+          (Consommateur -> Producteur ou Producteur -> Consommateur)