X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=TD1%2Fexo3%2Fdeadlock.txt;fp=TD1%2Fexo3%2Fdeadlock.txt;h=c926496405bc750b9428f7059f1a70d951e1daf6;hb=7bd74736638acf238b5bcb2ae51e05519ad116ae;hp=0000000000000000000000000000000000000000;hpb=d3ae3c42030dcfc0d1de38673f221c7618863ca9;p=TD_SR.git diff --git a/TD1/exo3/deadlock.txt b/TD1/exo3/deadlock.txt new file mode 100644 index 0000000..c926496 --- /dev/null +++ b/TD1/exo3/deadlock.txt @@ -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)