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 :

exclusion mutuelle problème de référence


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut exclusion mutuelle problème de référence
    Bonjour,

    je suis en train de faire une communication entre serveur. Mon serveur a un thread de reception voici ce que je voudrai faire : J'ai un index commun pour mes threads, c'est ma ressource critique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
            private vector <socket> vSocket;
            private vector <timer> vTimer;
            private int index;
     
     
    	public void run() {
     
                    /* retourne des référence pour un socket et un timer et autre
    selon mon indexe. Tout cela dans un dans une seule méthode synchronized
    car l'index lie entre eux vSocket.get(index) et vTimer.get(index), comment
    faire??? */
     
     
    		try {
    			while(!finished) {
    					DatagramPacket pack =
    					new DatagramPacket(socket.getData(), socket.getData().length);
     
    				// Receive datagram
    				if(socket.getSocket() != null) {
    					socket.getSocket().receive(pack);
    					String recept = new String (pack.getData(), pack.getOffset(), pack.getLength(), "ISO-8859-1");
     
    					System.out.println(recept);
     
    					// ... test de comparaison sur la reception
    				} 
    			}
    		}	 
    		catch (SocketException e) {
    			System.err.println("Fermeture inattendue sur une socket");
    		} 
    		catch (IOException e) {
    			e.printStackTrace();
    		}
    	}

  2. #2
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Je comprend pas trop ta question mais voici quelque conseils

    private vector <socket> vSocket;
    private vector <timer> vTimer
    J'imagine que t'a créer une class socket et un classe timer ? si cest le cas, ca porte un peu la confusion car il existe déjà un class nommé Socket et Timer

    Un DatagramPacket utilise le protocle UDP pour transmettre les paquets.
    C'est sur que c'est plus rapide mais en tu vraiment besoin ? Si non, c'est plus simple avec la class ServerSocket et Socket - protocle TCP.

  3. #3
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 220
    Par défaut
    slt,

    oui j'ai crée une classe socket et j'utilise java.util.Timer.

    En fait ce que je veux c'est qu'il soit locale a la thread et pas a l'objet car pour manipuler l'index il faut que ma procédure soit alors en synchronized mais ce qui se passe c'est que lorsqu'un thread est a la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DatagramPacket pack = new DatagramPacket(socket.getData(), socket.getData().length);
    Il se met en attente de la reception du paquet et monopolise la section critique. C'est pour cela que j'aimerais que ce soit locale au thread (dans le run).
    J'espère que tu m'as compris. J'ai bien les données membres que tu as cités et j'aimerais avoir une référence locale au threads.

  4. #4
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Ca m'éclaire un peu mais je suis pas sure que c'est suffisant ... on va voir
    Ce que je comprend c'est qu'il y a un problème de synchronization avec la variable index.

    humm ca me semble un peu risqué comme opération:
    l'index lie entre eux vSocket.get(index) et vTimer.get(index),
    pour t'assurer qu'il sont toujours vraiment lié englobe tes sockets et timer dans une class du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Flux {
        public Socket socket;
        public Timer timer;
        public Flux(Socket s, Timer t){
            socket = s;
            timer = t;
        }
    }
    Ensuite tu pourra créer un Vector de Flux:
    pirvate Vector vFlux;
    au moin en faisant vFlux.get(index) tu est assuré d'avoir le bon socket avec le bon Timer.

    Bon tu va me dire que c'est bien intéressant tout ca mais, ca règle pas mon problème !

    Pour ton problème de synchro faudrait que tu me donne plus d'info
    Tu peux aussi consulter ce tutorial tres intérressant:

    http://rom.developpez.com/java-synchronisation/

Discussions similaires

  1. Utiliser un héritage avec exclusion mutuelle correctement
    Par akecoocoo dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 20/11/2005, 22h54
  2. Problème de référence de données circulaire
    Par Wismerhill50 dans le forum Langage
    Réponses: 3
    Dernier message: 23/10/2005, 22h38
  3. Exclusion mutuelle
    Par Jahjouh dans le forum C++
    Réponses: 15
    Dernier message: 24/09/2005, 12h32
  4. [Thread][Synchronisation] Exclusion mutuelle
    Par masto dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 20/01/2005, 16h02
  5. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 10h39

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