Programmation Concurrente (2016)

Question sur la terminaison du problème du barbier

Voir le sujet précédent Voir le sujet suivant Aller en bas

Question sur la terminaison du problème du barbier

Message par antoinezim le Lun Oct 16, 2017 6:38 pm

Bonjour,
je n'ai pas bien compris quelle condition doit vérifier le programme pour terminer.

J'ai cru comprendre qu'il fallait faire quelque chose comme :
threadBarbier.interrupt();
Puis récupérer l'exception levée par le wait() mettant en attente le travail du barbier lorsque le salon est vide pour finir le thread.

Je pensais que la condition était "Si le salon est vide alors on termine le thread du barbier", or le barbier peut finir le travail avec le premier client avant que le 2e client arrive => terminaison du thread du barbier avant l'arrivée du deuxième client.


antoinezim

Posts : 2
Join date : 16/10/2017

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la terminaison du problème du barbier

Message par ClaudeDutheillet le Mar Oct 17, 2017 9:55 am

Et donc vous répondez à la question que vous posez :-) : il ne suffit pas que le salon soit vide, il faut qu'il n'y ait plus de clients pour que le barbier puisse se terminer. Seule la tâche principale dispose de cette information. C'est donc à elle d'"interrompre" le barbier lorsque tous les clients sont terminés.

La modification de l'interrupted status doit ensuite être détectée dans le thread du barbier, soit par une interrogation explicite (méthode interrupted), soit implicitement : toutes les méthodes d'attente interrogent périodiquement la valeur de ce drapeau et lèvent une InterruptedException lorsqu'elles détectent que celui-ci est positionné.


ClaudeDutheillet

Posts : 5
Join date : 26/08/2016

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum