Bonjour, Je travaille sur le problème du coiffeur qui dort. avec l'addition d'avoir un client prioritaire quand ils arrivent ils vont en première ligne et ils sont les prochains à se faire couper les cheveux.Les threads Java ne fonctionnent pas correctement avec la liste liée
J'utilise un linkedlist
et si je vois un client prioritaire je le mets au début de la liste, si le client n'est pas prioritaire il va à la fin de la liste. alors j'appelle la méthode wantHaircut pour obtenir le premier élément de la liste. Mon problème est que les clients sont traités dans l'ordre où ils arrivent, et le client prioritaire doit attendre. voici le code où tout se passe. des idées que je fais mal? grâce
public void arrivedBarbershop(Customer c){
if(waiting < numChairs && c.isPriority()){
System.out.println("Customer " + c.getID() + ": is a priority customer - SITTING -");
mutex.up();
customer_list.addFirst(c);
}
else if(waiting >= numChairs && c.isPriority()){
System.out.println("Customer " + c.getID() + ": is a priority customer - STANDING -");
mutex.up();
customer_list.addFirst(c);
}
else if(waiting < numChairs && !c.isPriority()){
waiting++;
System.out.println("Customer " + c.getID() + ": arrived, sitting in the waiting room");
customer_list.addLast(c);
customers.up(); // increment waiting customers
}
else if(waiting >= numChairs && !c.isPriority()) {
System.out.println("Customer " + c.getID() + ": went to another barber because waiting room was full - " + waiting + " waiting");
mutex.up();
}
if(!customer_list.isEmpty()){
this.wantHairCut(customer_list.removeFirst());
}
}
public void wantHairCut(Customer c) {
mutex.up();
barber.down(); // waits for being allowed in barber chair
System.out.println("Customer " + c.getID() + ": getting haircut");
try {
/** haircut takes between 1 and 2 seconds **/
Thread.sleep(Barbershop.randomInt(1, 2) * 1000);
} catch (InterruptedException e) { }
System.out.println("Barber: finished cutting customer " + c.getID() + "'s hair");
c.gotHaircut = true;
cutting.up(); // signals cutting has finished
/** customer must pay now **/
this.wantToCashout(c);
}
Qu'est-ce que c'est «numChairs»? – Roman
c'est le nombre de chaises dans la salle d'attente. s'ils sont tous pris, le client part à moins qu'il ne soit un client prioritaire, alors il peut attendre debout. – user69514
J'ai utilisé un vecteur au lieu d'une liste chaînée car les vecteurs sont thread-safe, mais j'ai toujours le même problème. Je ne sais pas ce que je fais de mal. – user69514