US

Deadlock

Lorsqu'on commence à avoir beaucoup de méthodes ou blocs synchronized, comme on l'a dit précédemment, le programme devient de moins en moins concurrent. De plus, on peut se retrouver face à des deadlocks. Il s'agit d'un état dans lequel le programme est tout simplement bloqué et plus rien ne va pouvoir se passer, le programme ne pourra jamais se terminer. Pour comprendre cela, regardons un moment la figure suivante.

Deadlock
Figure 2.5 Deadlock.

Alice désire inviter Bob et Charles à une super fête, et leurs demande donc si ils veulent venir. Bob ne vient que si Charles vient, et vice-versa. On est donc dans une situation où plus rien ne bouge, Bob attend la réponse de Charles qui attend celle de Bob. On est coincé, on est dans un deadlock.

Graphe d'allocation des ressources

Prenons un exemple où un deadlock pourrait survenir dans un programme. Le listing suivant montre un exemple avec deux threads qui désirent obtenir les lockA et lockB.