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

Java Discussion :

ordre execution thread.


Sujet :

Java

  1. #1
    Membre actif
    Inscrit en
    Novembre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 24
    Par défaut ordre execution thread.
    bonjour ,

    une question svp ,,,

    on a une thread T1 qui demande l'accès a une ressources , avant la thread T2 comment garantir que la demande de T1 sera exceuté avant T2 ?

    merci

  2. #2
    Membre expérimenté Avatar de welcome_59
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 203
    Par défaut
    La meilleure stratégie est fonction du contexte de ton application.

    Toutefois il existe plusieurs possibilités, parmi lesquelles :

    • "brancher" T2 sur la fin de T1 - join()
    • synchroniser la manipulation de la ressource, mais cela ne te garantit pas que T1 la manipulera avant T2. Pour assurer cela, tu pourrais par exemple marquer la ressource en fonction du thread qui agit dessus (cela dit, dans les cas que j'ai connus c'est loin d'être la meilleure des idées). Attention toutefois, la synchronisation peut vite générer un casse-tête en matière de performances.
    • utiliser un flag te permettant d'exécuter l'accès à la ressource dans T2 (ou de démarrer T2) sous une condition particulière (que T1 l'aie modifiée par exemple). Cette condition peut aussi être liée au temps.


    D'autres stratégies sont possibles, mais dans tous les cas, il faut choisir en fonction du contexte. Si tu postais des détails sur le fonctionnement attendu de l'application, ce serait probablement plus simple.

  3. #3
    Membre actif
    Inscrit en
    Novembre 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 24
    Par défaut
    merci welcome_59,,,,voici plus de details :


    il s'agit en fait d'un jeu que je suis entrain développer ( guerre des robots ) :

    Une fois le moteur du jeu démarré, il consulte le répertoire contenant les descriptions des différentes armées, et par introspection, instancie les différentes armées, et place les robots au hasard sur l'arène. Chaque robot sera implanté par un processus léger séparé, dont le jeu est responsable de la gestion (en particulier, c'est au jeu de créer/démarrer/arrêter les processus légers qui exécutent le code des robots). Un contexte d'évolution est fourni par le jeu à chaque robot, à sa création (voir les interfaces qui vous sont fournies). En particulier, le contexte contient une méthode radar() qui permet au robots de consulter ses alentours. Chaque robot peut à n'importe quel moment demander au jeu d'exécuter une action (poser une bombe, se déplacer). La demande d'action est bloquante passive. Elle est prise en compte à chaque tour par le jeu, dans l'ordre où elle est arrivée. Par exemple, si un robot R1 demande une action pour le tour de jeu suivant avant un autre robot R2, alors le jeu garanti que l'action de R1 sera exécuté avant celle de R2. Un robot peut demander au jeu des informations sur le jeu, par exemple sur les autres robots de la même armée


    voila

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Tu peux utiliser la classe Semaphore. D'apres la javadoc :
    When fairness is set true, the semaphore guarantees that threads invoking any of the acquire methods are selected to obtain permits in the order in which their invocation of those methods was processed (first-in-first-out; FIFO)
    a+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Dans ton cas, je ferai une sorte de pile des ordres.

    A chaque fois, qu'un autre est lancé, tu empiles un flag (un objet, un evenement, un string, ...) qui identifie l'ordre. Ensuite, tu dépiles tes ordres dans FIFO et comme ca, tu es sur de la chronologie...

    Facile à dire...pas facile à faire..

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par alexadvance Voir le message
    Dans ton cas, je ferai une sorte de pile des ordres.

    A chaque fois, qu'un autre est lancé, tu empiles un flag (un objet, un evenement, un string, ...) qui identifie l'ordre. Ensuite, tu dépiles tes ordres dans FIFO et comme ca, tu es sur de la chronologie...
    Le probleme de ce genre de systeme, c'est qu'ils sont synchronisés (au sens java du terme). Et si 2 threads sont bloqués en meme temps dans un bloc "synchronized", la machine virtuelle ne garantie pas que le premier qui attend est le premier qui passe. Ce qu'elle garantie, c'est que 2 threads n'auront pas la main en meme temps. Donc ca ne suffit pas pour ce qui est demandé...

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le meilleur moyen de garantir l'ordre des tâches, c'est de les faire exécuter par un seul thread.

Discussions similaires

  1. Ordre de thread
    Par Invité dans le forum C++
    Réponses: 10
    Dernier message: 16/05/2013, 11h03
  2. Ordre execution requetes Hibernate
    Par Dr_GreenThumb dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/05/2011, 14h23
  3. nosy et ordre execution des tests
    Par gilles06 dans le forum Général Python
    Réponses: 0
    Dernier message: 03/02/2011, 00h54
  4. ordre execution des actions lors d'un evenement
    Par fowinjo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/06/2007, 11h28
  5. execution, threads et fenêtre active
    Par inertia dans le forum MFC
    Réponses: 2
    Dernier message: 26/05/2005, 11h05

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