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

C# Discussion :

ordre de reprise de threads bloqués


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut ordre de reprise de threads bloqués
    bonjour,

    Je me demandais si, en C#, des threads bloqués se débloquaient dans leur ordre d'arrivée. Ex :

    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
    public void fonctionGlobale ()
    {
       //creation de cinq objets
       Object o1 = new Object();
       Object o2 = new Object();
       Object o3 = new Object();
       Object o4 = new Object();
       Object o5 = new Object();
     
       //création et lancement des threads
       Thread t1= new Thread(new ParameterizedThreadStart(functionLock));
       Thread t2= new Thread(new ParameterizedThreadStart(functionLock));
       Thread t3= new Thread(new ParameterizedThreadStart(functionLock));
       Thread t4= new Thread(new ParameterizedThreadStart(functionLock));
       Thread t5= new Thread(new ParameterizedThreadStart(functionLock));
       t1.Start(o1); 
       t2.Start(o2); 
       t3.Start(o3); 
       t4.Start(o4); 
       t5.Start(o5); 
      //ici on a 5 threads qui tournent ensemble, lekelle se réveillera le premier?
    }
     
    public static void functionLock(Object o){
          lock (locker) //partie critique
          {
              Sleep(5000);
              Console.Writeline(o.ToString());
           }
     
    }
    Dans le code suivant, est ce que l'ordre d'affichage des objets sera toujours o1, o2, o3, o4 et o5 ? Après kk tests ca à l'air d'être ca mais je n'ai pas trouvé de doc dessus pour etre sûr...
    merci

  2. #2
    Membre chevronné
    Avatar de Emerica
    Profil pro
    Consultant
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Par défaut
    Il n'y a en effet aucune certitude que tes threads repartent systématiquement dans l'ordre de départ. Le seul moyen est d'imposer leur synchronisation.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    Imposer leur synchronisation? cad?

  4. #4
    Membre chevronné
    Avatar de Emerica
    Profil pro
    Consultant
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Par défaut
    Ca dépend beaucoup de ce que tes threads font. Une manière courante est d'utiliser des évenements pour les synchroniser (ie AutoResetEvent et ManualResetEvent). La base se trouve ici.

    Utiliser Sleep rend le thread éligible pour exécution par le scheduler mais ne garantit pas que l'ordre d'exécution des threads soit similaire à leur ordre d'élection. Dans tous les systèmes multithreading, l'ordre n'est pas prévisible.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    En faite je voudrais juste que mes threads soit lancés dans leur ordre d'arrivée. Est ce que je dois implémenter moi meme une sorte de liste FIFO pour géré cela ou il y a déja quelque chose qui existe (d'ailleur peut on choisir le thread à réveiller à partir d'un id?) ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Tu veux faire quoi exactement ? Par ce que moi j'ai bien une solution pour toi : ne pas utiliser de thread supplémentaire, ce qui donne :

    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
     
    public void fonctionGlobale ()
    {
       //creation de cinq objets
       Object o1 = new Object();
       Object o2 = new Object();
       Object o3 = new Object();
       Object o4 = new Object();
       Object o5 = new Object();
     
       //création et lancement des non-threads
       functionLock(o1);
       functionLock(o2);
       functionLock(o3);
       functionLock(o4);
       functionLock(o5);
    }

Discussions similaires

  1. ordre d'execution de thread
    Par Etudiante_Ines dans le forum Général Java
    Réponses: 5
    Dernier message: 14/03/2012, 09h03
  2. [Visual C#] Reprise de threads bloqués
    Par levalp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/02/2008, 22h25
  3. L'ordre d'exécution des threads
    Par Dosseh dans le forum Modules
    Réponses: 1
    Dernier message: 05/07/2007, 20h24
  4. Réponses: 2
    Dernier message: 05/03/2007, 16h45
  5. pause et reprise de thread
    Par raggadoll dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/07/2003, 10h50

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