IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

petit pb de synchro


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Par défaut petit pb de synchro
    Bonjour,
    j'ai développé un serveur concurent qui gere plusieurs clients en meme tps.
    le probleme c'est que j'ai un une variable qui s'incremente à chaque requette d'un client (un client pouvant effectuer plusieurs requettes) pour tous les clients, a la fin j'ai besoin d'afficher cette variable a chaque client, lorsque tous les clients connectés auront fini leur requettes sachant que tous les clients ne finissent pas leurs requettes en meme temps.
    Avez vous une idée de ce que je dois faire?

  2. #2
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    tu peux synchroniqer tes thread en mettant le modifier synchronized dans la signature de ta méthode pour synchroniser les méthodes que tu veux. Sinon pour ne synchroniser que certaines parties du code, jette un oeil à ReentrantLock (un truc comme ça), y a déjà des topics postés sur le sujet.

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Par défaut
    j'ai déjà essayé ca.
    bon en gros voila mon pb:la variable dont je parlais est count:

    public class Serv {
    private final ServerSocket serverSocket;
    private static int count=0;//nombre de requettes sur le serveur
    //...

    public Serv(int port) throws IOException{
    //initialisation du serveur attaché au port choisi
    serverSocket =new ServerSocket(port);
    System.out.println("Serveur attache a :"+
    serverSocket.getLocalSocketAddress()+"\n");
    }

    public void launch()throws IOException
    {
    while(true)
    {
    final Socket client=serverSocket.accept();
    new Thread(new Runnable()
    {
    public void run()
    {
    serveClient(client);
    }
    }).start();
    }
    }
    public static void serveClient(Socket client) {

    String pseudo = "";
    try {
    //...code trop long
    BufferedReader br=new BufferedReader(new InputStreamReader
    (client.getInputStream(),"UTF8"));
    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter
    (client.getOutputStream(),"UTF8"));
    bw.write("==>Bonjour choisir un pseudo: ");
    bw.newLine();
    bw.flush();
    //...
    // boucle: tant que le client effectue une requette
    count++;
    //fin de boucle

    bw.write("le nombre de requettes sur le serveur est de:"
    +count);//ici il faut attendre la fin des requettes de tous les clients
    bw.newLine();
    bw.flush();
    //...
    }catch (IOException e) {

    e.printStackTrace();
    }
    finally{
    try{
    client.close();
    }catch(IOException e){}
    }
    }
    public static void main(String[] args) throws IOException {
    Serv server;
    //...code trop long
    server=new Serv(Integer.parseInt(args[0]));
    server.launch();
    }
    }

    alors comment attendre que tous les clients connectés aient fini leurs requettes pour afficher la variable count à tous les clients.

  4. #4
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    en efet, utiliser une variable d'empêche de synchroniser son incrémentation. Il suffit tout simplement de créer une méthode increment() avec le mot clef synchronized et pour seul code count++
    Simple et efficace.

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Par défaut
    merci, mais j'ai déjà essayé de synchroniser comme t'as dit et ca n'empeche pas l'affichage de la variable avant que tous les utilisateurs aient terminé leurs requettes.j'ai meme crée une fonction affche() avec le mot synchronized mais sans effet.
    S'il y a autre solution ou autre proposition elle est la bienvenue

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Razgriz
    en efet, utiliser une variable d'empêche de synchroniser son incrémentation. Il suffit tout simplement de créer une méthode increment() avec le mot clef synchronized et pour seul code count++
    Simple et efficace.
    Tu peux simplement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    synchronized(unVerrou) { count++; }

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Par défaut
    oui j'ai déjà essayé mais ca ne marche pas non plus dans mon contexte.
    Franchement je sais pas quoi faire ave cette histoire là!!!

Discussions similaires

  1. [Petite requête] Nombre de transactions par jour
    Par Braim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 10h53
  2. Réponses: 3
    Dernier message: 28/02/2003, 17h06
  3. Réponses: 3
    Dernier message: 16/12/2002, 16h12
  4. [TP]TP s'affiche en tout petit sous w2000
    Par spiroucarolo dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 21/10/2002, 16h36
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo