[JAVA] Problème de concurrence d'accès...

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

[JAVA] Problème de concurrence d'accès...

Message  Invité le Dim 13 Juil 2008, 13:33

Bonjour,

J'ai un soucis de concurrence d'accès entre Threads dans un programme client-serveur.

Voilà le problème:

J'ai mon client qui est un Thread et dans son run, il ne fait que des read à l'infini (à l'écoute du serveur). Mais quand le client demande quelque chose de lui-même au serveur, dans une autre méthode (jouer, par exemple), il envoye sa requête et fait un read pour attendre la réponse à sa requête. C'est là qu'intervient le problème: c'est que j'ai deux reads en même temps. Je ne sais pas lequel va être prit par le write du serveur... J'aimerai que ce soit le read de la méthode jouer qui soit pris.

Auriez-vous une solution?

Herbiti

Invité
Invité


Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  cluigi le Dim 13 Juil 2008, 22:38

salut,
il ne faudrait pas créer un thread par client du coté serveur? genre dès qu'un client se connecte on crée un thread et les données transitent d'un thread à l'autre

cluigi

Nombre de messages : 710
Age : 30
Prénom : Luigi
Statut : Ancienne star
Localisation : Bruxelles
Date d'inscription : 21/12/2006

http://stages2008.cluigi.be

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  Invité le Dim 13 Juil 2008, 22:48

c'est pas ça le soucis, le soucis est dans la partie cliente... il y a deux read en même temps (deux threads) dans le client et il faut que ce soit l'un qui prenne le dessus sur l'autre...

Invité
Invité


Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  pbt le Lun 14 Juil 2008, 22:54

Il y a sans doute un problème de conception la-dessous.

Un des concepts du multithread est jsutement de permettre à plusieurs tâches d'être exécutées en "même temps" ... mais alrs, il ne faut pas qu'elles soient concurrentes ...

Tu pourrais envisager d'avoir un mutex sur ton socket et de le prendre lorsque tu envoies ta requête au serveur ... mais ça ne me parrait pas beau.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  mvh le Mar 15 Juil 2008, 00:32

cluigi a écrit:salut,
il ne faudrait pas créer un thread par client du coté serveur? genre dès qu'un client se connecte on crée un thread et les données transitent d'un thread à l'autre
un fork par exemple ... lorsque le client se connecte ... et le serveur est à nouveau libre ... magic !!!

PS :
concurrent != en compétition Wink

_________________

La fête c'est nul sans Kidibul !
... (vieux proverbe local)



mvh

Nombre de messages : 5973
Age : 104
Prénom : Marcel VANHAELEN
Statut : (fin de bail)
Win 3.1 à reprendre
Localisation : Koekeliek de Baselberg
Date d'inscription : 06/12/2006

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  Invité le Mar 15 Juil 2008, 10:10

PbT a écrit:Il y a sans doute un problème de conception la-dessous.

Un des concepts du multithread est jsutement de permettre à plusieurs tâches d'être exécutées en "même temps" ... mais alrs, il ne faut pas qu'elles soient concurrentes ...

Tu pourrais envisager d'avoir un mutex sur ton socket et de le prendre lorsque tu envoies ta requête au serveur ... mais ça ne me parrait pas beau.

hum...

Code:
    public void run()
    {
        try
        {
            while (true)
            {
                Command command=(Command)read();
                if (command instanceof Disconnect)
                {
                    notifierChangement(command);
                    break;
                }
            }
            close();
        }
        catch (IOException ex)
        {}
    }

Code:
    public Play jouer(char lettre) throws IOException
    {
        write(new ToPlay(lettre));
        return (Play)read();
    }

le run s'éxécute toujours et est "toujours" dans son read.
Il faudrait que quand on appelle jouer le read du run s'arrete et reprenne à la sortie de jouer.

bien à vous.

Herbiti

Invité
Invité


Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  yoda le Mar 15 Juil 2008, 12:43

un read avec un timeout tres cours et un mutex comme disait Pinkilla ... mais c'est tres deg et ne resout pas les probleme ...

mais je dois dire que je vois pas tres bien a quoi sert ton read a l'infini vu qu'il fais rien ... ca sert a rien ton histoire ...

yoda

Nombre de messages : 1119
Age : 33
Prénom : Antoine
Statut : Ancien
Localisation : Bruxelles
Date d'inscription : 17/12/2006

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  Invité le Mar 15 Juil 2008, 12:53

yoda a écrit:un read avec un timeout tres cours et un mutex comme disait Pinkilla ... mais c'est tres deg et ne resout pas les probleme ...

mais je dois dire que je vois pas tres bien a quoi sert ton read a l'infini vu qu'il fais rien ... ca sert a rien ton histoire ...

il sert à être à l'écoute continue du serveur...

Invité
Invité


Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  nvs le Mar 15 Juil 2008, 14:58

Herbiti a écrit:
yoda a écrit:un read avec un timeout tres cours et un mutex comme disait Pinkilla ... mais c'est tres deg et ne resout pas les probleme ...

mais je dois dire que je vois pas tres bien a quoi sert ton read a l'infini vu qu'il fais rien ... ca sert a rien ton histoire ...

il sert à être à l'écoute continue du serveur...
et pourquoi ne pas lire que dans cette boucle et dispatcher ensuite en conséquence ?








_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  Invité le Mar 15 Juil 2008, 15:02

nvs a écrit:
Herbiti a écrit:
yoda a écrit:un read avec un timeout tres cours et un mutex comme disait Pinkilla ... mais c'est tres deg et ne resout pas les probleme ...

mais je dois dire que je vois pas tres bien a quoi sert ton read a l'infini vu qu'il fais rien ... ca sert a rien ton histoire ...

il sert à être à l'écoute continue du serveur...
et pourquoi ne pas lire que dans cette boucle et dispatcher ensuite en conséquence ?








j'y ai pensé mais alors, j'aurai deux fonctions: une qui écrit ce que je veux faire et une qui analyse la réponse du serveur... Ce n'est pas très centralisé...

Invité
Invité


Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  cluigi le Mar 15 Juil 2008, 18:37

c'est pas le client qui doit rester a l'ecoute du serveur mais bien l'inverse normalement :s

cluigi

Nombre de messages : 710
Age : 30
Prénom : Luigi
Statut : Ancienne star
Localisation : Bruxelles
Date d'inscription : 21/12/2006

http://stages2008.cluigi.be

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  yoda le Mar 15 Juil 2008, 18:53

c'est nawak ton truc, un client peut tres bien recevoir des infos d'un serveur n'importe quand ...

yoda

Nombre de messages : 1119
Age : 33
Prénom : Antoine
Statut : Ancien
Localisation : Bruxelles
Date d'inscription : 17/12/2006

Revenir en haut Aller en bas

Re: [JAVA] Problème de concurrence d'accès...

Message  Contenu sponsorisé Aujourd'hui à 20:40


Contenu sponsorisé


Revenir en haut Aller en bas

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


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