Commit | Line | Data |
---|---|---|
7bd74736 JB |
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é | |
c87306af | 13 | (Consommateur -> Producteur ou Producteur -> Consommateur) et sort de son attente. |