
prend la fourchette à gauche
prend la fourchette à droite
mange pendant un certain temps
met les deux fourchettes à la table
pense pendant un certain temps
class Philosopher extends Thread{
class Fork{
class Dinner{
|
P1 take fork 0 P1 look for the second fork P2 take fork 1 P2 look for the second fork P3 take fork 2 P3 look for the second fork P4 take fork 3 P4 look for the second fork P5 take fork 4 P5 look for the second fork |
L'approche le plus souvent utilisée pour éviter le deadlock est introduction une ordre prioritaire dans l'utilisation des resources.

La deuxième approche modifie le comportement des threads. Quand le philosophe constate que la fourchette n'est pas libre (exception est générée) se retire en laissant les fourchettes pour un certain temps avant de réessayer de les prendre.
public class TakenExc extends Exception{ } |
class Philosopher extends Thread{
class Fork{
class Dinner{
|