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 :

Simulation de la réservation de ressource en Java


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Simulation de la réservation de ressource en Java
    Bonjour à tous,

    Je voudrais simuler en java un ordonneonceur pour la réservation de ressources.

    Pour cela j'ai besoin de bloquer une demande de réservation, en attendanbt que la ressource soit libéré.

    Existe il une façon d'attaquer ce probléme.
    J'ai essaué avec l'exemple consommateur-producteur mais ça ne fonctionnait pas ?


    Merci

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Regarde du côté de la classe Thread et du mot-clef java "synchronized" ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par iohack
    Regarde du côté de la classe Thread et du mot-clef java "synchronized" ?
    l'exemple producteur cosommateur se base sur cela;
    seulement ceci ne m'a pas résolu le probléme.

  4. #4
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Je ne connais l'exemple dont tu parles mais si tu mets une synchronization sur ton objet ressource lorsque tu t'en sert et une même synchronization lors de la réservation, cela devrait répondre à ta question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void traitementRessource(Ressource r){
       synchronized(r){
            // Traitement de la ressource
       }
    }
     
    public void reservation(Ressource r){
       synchronized(r){
            // Effectue la reservation uniquement lorsque la ressource sera liberee ( car au mot clef synchronized )
       }
    }

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par wazer
    l'exemple producteur cosommateur se base sur cela;
    seulement ceci ne m'a pas résolu le probléme.
    C'est à dire ??? Quel est le problème ???

    a++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par adiGuba
    Salut,

    Citation Envoyé par wazer
    l'exemple producteur cosommateur se base sur cela;
    seulement ceci ne m'a pas résolu le probléme.
    C'est à dire ??? Quel est le problème ???

    a++

    Voici le probléme;

    Supposons que j'ai 2 ressources disponibles; s1 et s2. (dans mon cas il s'agit de n ressources; valeur inconnu).

    le client A reserve et utilise la resoource s1.
    le client B reserve et utilise la resoource s2.


    un client C veut reserver une ressourse, il lance une demande de reservation. Puisque tous les ressources sont reserves, j'aimerais mettre en instance (en attente ) sa demande sans que ceci bloque l'execution de l'application

    quand le clienr A libére s1; je voudrais que le programme va reserver s1 pour le client C.

    Quand j'ai utilisé les methodes wait() et notifyAll(), mon application se bloque des que le client C fait une demande de reservation de ressource.


    Merci pour votre aide

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Il vaut mieux utiliser synchronized que des wait() et notifyAll(), c'est plus simple à gérer.

    Citation Envoyé par wazer
    Quand j'ai utilisé les methodes wait() et notifyAll(), mon application se bloque des que le client C fait une demande de reservation de ressource.
    Tu est bien en environnement multithread au moins ???

    a++

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par adiGuba


    Tu est bien en environnement multithread au moins ???

    Oui bien sûr,

    Mais je me demande également si il n'y aps une autre façon pour attaque le probléme ?



    Maerci

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Je créerai une classe de pool de ressource. Celle ci contiendrait une méthode réserver qui prend en paramêtre un client et renvoie une ressource libre si il y en a une, et null si il n'y en a pas. Si il n'y a pas de ressource, le client passé en paramêtre est ajouté à une file "attente". Quand une ressource est libérée, grâce à une méthode libérer du pool, celui-ci vérifie si il y a un client dans attente. Si c'est le cas, il invoque une méthode voiciLaRessource du client qui prend en paramètre la ressource libérée. Le pool est unique, son thread est indépendant, ses méthode réserver et libérer sont synchronized. Le client doir susprendre son thread lui-même quand sa demande de réservation reçoit null.

  10. #10
    Membre averti Avatar de let_me_in
    Inscrit en
    Mai 2005
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 441
    Points : 437
    Points
    437
    Par défaut
    tu as une classe java.util.concurrent.Semaphore; (1.5 seulement).

    -tu cree un semaphore S initialise a 0.

    -un semaphore mutex d'esclision mutuelle (initalise a 1);
    -une variable entiere nbResourceDispo intialisee a 2.

    et voila l'algo:
    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
     
    P(mutex); // mutex.acquire() en java
    si (nbRessourceDispo==0){
         V(mutex);
         P(S);
         }
         else{
                nbRessourceDispo--;
                V(mutex);
                }
    <Section Critique>
     
    P(mutex)
    si (S.hasQueuedThreads()) V(S);
    else nbRessourceDispo++;
    qui dit Dieu n'existe pas dis que les programmes tournent sans processeur.

Discussions similaires

  1. Ressources concernant Java EE 6
    Par Ricky81 dans le forum Java EE
    Réponses: 2
    Dernier message: 01/02/2012, 02h53
  2. Simuler un espace faible en ressource mémoire
    Par Atomz dans le forum Linux
    Réponses: 11
    Dernier message: 28/10/2010, 16h22
  3. comment simuler un clic sur un bouton en java
    Par kohan95 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/03/2009, 13h31
  4. Ressource en Java
    Par PM_calou dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2008, 10h06
  5. Comment simuler un tirage à pile ou face en Java ?
    Par Pierre8r dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 03/12/2007, 15h41

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