From 98a1366c704f3f1d6e757660c794a47ab076e280 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 9 Mar 2018 21:05:50 +0100 Subject: [PATCH] TD1: Refine the deadlock explanation. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- TD1/exo3/deadlock.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/TD1/exo3/deadlock.txt b/TD1/exo3/deadlock.txt index 0aa206a..bf75e43 100644 --- a/TD1/exo3/deadlock.txt +++ b/TD1/exo3/deadlock.txt @@ -3,7 +3,8 @@ Pseudo-trace deadlock avec deux consommateurs, deux producteurs et un tampon de Buffer vide -> C1 et C2 se mettent en attente dans la file (C1, C2). -> P1 rentre en section critique et P2 se met en attente soit (P2, C1, C2). - P1 depose et notifie a un thread en attente. Le dernier en attente est P2 donc P2 est notifié. + P1 depose et notifie a un unique thread en attente. + Le dernier en attente est P2 donc P2 est notifié. Buffer plein -> P2 sort de la file d'attente (C1, C2) et entre en SC, P1 se met en attente (P1, C1, C2). Or le buffer est plein, donc P2 se met en attente dans la file (P2, P1, C1, C2). -> donc C1, C2, P1, P2 sont en attente dans la file (P2, P1, C1, C2) @@ -14,6 +15,6 @@ Solution: faire un notifyAll() en sortie de SC dans le buffer pour s'assurer que thread d'un type différent du type courant sortant du moniteur est également notifié (Consommateur -> Producteur ou Producteur -> Consommateur) et sort de son attente. -N.B. : On suppose dans la mise en attente dans moniteur des threads est une file. +N.B. : On suppose que la mise en attente dans moniteur des threads est une file. Mais même si c'est une autre structure de données, la possibilité de deadlock demeure. -- 2.34.1