Thread.Join [Résolu]

Messages postés
11
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
4 mars 2011
- - Dernière réponse : Lune03
Messages postés
11
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
4 mars 2011
- 28 sept. 2010 à 14:57
Bonjour,

Pour me familiariser avec la fonction "Join", j'ai lancé le programme suivant, mais contrairement à ce que j'attendai, la fonction "thread0.Join()" à privilègié l'execussion des 3 threads alors que je m'attendai à ce que seul le thread0 soit finalisé (et que les 3 autres : current, Thr2 et Thr3 soient en attente) ?????

Si quelqu'un peut m'éclairer !
Cordialement

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ThreadJoin2
{
    class Program
    {
        public static void run0()
        {
            for (int i0 = 1; i0 < 100; i0++)
            {
                System.Console.Write(" thread0=" + i0);
                Thread.Sleep(10);
            }
        }        
        public static void run1()
        {
            for (int i0 = 1; i0 < 100; i0++)
            {
                System.Console.Write(" thread1=" + i0);
                Thread.Sleep(10);
            }
        }
        public static void run2()
        {
            for (int i0 = 1; i0 < 100; i0++)
            {
                System.Console.Write(" thread2=" + i0);
                Thread.Sleep(10);
            }
        }
        
        public static void etatsThreads(Thread principal, Thread thrd1, Thread thrd2, Thread thrd3)
        {
            System.Console.WriteLine("\n" + principal.Name + " : " + principal.ThreadState);
            System.Console.WriteLine(thrd1.Name + " : " + thrd1.ThreadState);
            System.Console.WriteLine(thrd2.Name + " : " + thrd2.ThreadState);
            System.Console.WriteLine(thrd3.Name + " : " + thrd3.ThreadState);
        }

        static void Main(string[] args)
        {
            Console.Clear();
            Console.WriteLine("Lancement des threads :");
            Thread principal = Thread.CurrentThread;
            principal.Name = "principal";
            Thread thread0 = new Thread(new ThreadStart(run0));
            thread0.Name = "thread0";
            Thread thread1 = new Thread(new ThreadStart(run1));
            thread1.Name = "thread1";
            Thread thread2 = new Thread(new ThreadStart(run2));
            thread2.Name = "thread2";
            etatsThreads(principal, thread0, thread1, thread2);
            thread0.Start();
            thread1.Start();
            thread2.Start();
            System.Console.WriteLine("\n-> All Threads started !");
            etatsThreads(principal, thread0, thread1, thread2);
            for (int i = 1; i < 20; i++)
            {
                System.Console.WriteLine(" i = " + i);
                Thread.Sleep(10);
            }
            etatsThreads(principal, thread0, thread1, thread2);
            System.Console.WriteLine("\n-> THR0 JOIN(D) !");     
            thread0.Join();
            System.Console.WriteLine("\n-> THR0 JOIN(F) !");    
            etatsThreads(principal, thread0, thread1, thread2);
            for (int i = 20; i < 100; i++)
            {
                System.Console.WriteLine(" i = " + i);
                Thread.Sleep(10);
            }
            System.Console.WriteLine("fin de tous les threads.");
            System.Console.Read();
        }        
    }
}
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
11
Date d'inscription
mardi 28 septembre 2010
Statut
Membre
Dernière intervention
30 avril 2012
3
Merci
Effectivement, le thread0.Join() met uniquement le thread principal en attente jusqu'à ce que le thread0 soit terminé. L'exécution des autres threads (1 et 2) se poursuit au même rythme.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de captainFoyd
Messages postés
11
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
4 mars 2011
0
Merci
OK !
Merci pour votre réponse.
Commenter la réponse de Lune03