ServeurMultiThreadv3
2 participants
Page 1 sur 1
ServeurMultiThreadv3
Bonjour,
Je voudrais revenir sur cette partie du code de la methode run() du client :
Le client attend que le servant le réveil. Mais si une commutation intervient la ou je l'ai précisé dans le code, et que le servant réveil le client avant que le client ne se soit endormi, le client ne se réveillera jamais non ? et par conséquent, le serveur ne se terminera jamais. Pourrait-on mettre dans le client un boolean requeteTraite à false, et qui sera mis à true (action synchronisé sur reveil) seulement si la requete par le servant s'est terminé ? Ainsi on s'assurerai de s'endormir seulement si requeteTraite vaut false.
Merci
Je voudrais revenir sur cette partie du code de la methode run() du client :
- Code:
f.put(r);
this.trace("j'attends le serveur");
//COMMUTATION
synchronized (reveil) {
reveil.wait();
}
Le client attend que le servant le réveil. Mais si une commutation intervient la ou je l'ai précisé dans le code, et que le servant réveil le client avant que le client ne se soit endormi, le client ne se réveillera jamais non ? et par conséquent, le serveur ne se terminera jamais. Pourrait-on mettre dans le client un boolean requeteTraite à false, et qui sera mis à true (action synchronisé sur reveil) seulement si la requete par le servant s'est terminé ? Ainsi on s'assurerai de s'endormir seulement si requeteTraite vaut false.
Merci
ren12- Posts : 7
Join date : 11/10/2016
Re: ServeurMultiThreadv3
Bonjour,
J'ai en effet testé en mettant un "sleep(10000) avant de faire le wait() dans le client et en effet, il y a un souci. Mon programme fonctionne avec une hypothèse importante, c'est que le client s'endorme immédiatement après avoir contacté le serveur... dans les exécutions que j'ai faites, j'ai des cas de commutation mais le client reprends à temps en général car la création des servants (surtout via un pool) prends du temps.
Bravo à vous d'avoir su constater cette exécution atypique.
J'ai en effet testé en mettant un "sleep(10000) avant de faire le wait() dans le client et en effet, il y a un souci. Mon programme fonctionne avec une hypothèse importante, c'est que le client s'endorme immédiatement après avoir contacté le serveur... dans les exécutions que j'ai faites, j'ai des cas de commutation mais le client reprends à temps en général car la création des servants (surtout via un pool) prends du temps.
Bravo à vous d'avoir su constater cette exécution atypique.
Dernière édition par Admin le Sam Oct 15, 2016 7:45 pm, édité 1 fois
Re: ServeurMultiThreadv3
Oups, je réalise que je n'ai pas répondu concernant votre solution. Pour être franc je la trouve un peu moche ;-). cela dit, comme les servants n'accèdent qu'à un seul client, cela fonctionne très bien.
On verra quelque chose de plus élégant avec un autre type de synchronisation sur une attente de résultat plus loin dans le cours (que l'on peut considérer comme plus élégante).
On verra quelque chose de plus élégant avec un autre type de synchronisation sur une attente de résultat plus loin dans le cours (que l'on peut considérer comme plus élégante).
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|