| 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. |