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 la plus souvent utilisée pour éviter attente circulaire est d'imposer un ordre total de tous les types de ressources. Chaque thread demande des ressources dans un ordre croissant d'énumération. Ainsi, s'il existe unе liste ordonnée de n ressources {r1,r2,..rn} et un thread nécessite les ressources ri et ri+j pour accomplir une tâche, il doit d'abord demander ri puis ri+j.
public class TakenExc extends Exception{ private static final long serialVersionUID = 1L; } |
class Philosopher extends Thread{ class Fork{ class Dinner{ |