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 :

[C#][Thread] Quel resultat attendu par ThreadPriority ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut [C#][Thread] Quel resultat attendu par ThreadPriority ?
    Bonjour, quelque chose a du m'échapper dans le fonctionnement des threads. J'ai fait le code suivant :

    En résumé, il instancie 4 Threads, les lance tous les 4 et les threads inscrivent leur nom en boucle sur la console.
    L'un d'eux a une haute priorité, et l'autre une basse.

    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
    38
    39
    40
        class Program
        {
            static void Main(string[] args)
            {
                Thread[] threads = new Thread[4];
     
                for (int i = 0; i < 4; i++)
                {
                    Feux feu = new Feux();
     
                    ThreadStart entryPoint = new ThreadStart(feu.run);
                    threads[i] = new Thread(entryPoint);
                    threads[i].Name = "thread " + i;
                    threads[i].Start();   
                }
                threads[0].Priority = ThreadPriority.Lowest;
                threads[2].Priority = ThreadPriority.Highest;
     
            }
        }
     
        class Feux
        {
            static Object Mutex = new Object();
            EtatFeux etatFeux;
     
            public void run()
            {
                while (true)
                {
                    lock (Mutex)
                    {
                        Console.WriteLine(Thread.CurrentThread.Name);
                        Thread.Sleep(50);
     
                    }
                }
            }
     
        }
    Je m'attendais à avoir en sortie les noms des threads dans n'importe quel ordre, avec plus de "thread 2" et moins de "thread 0".

    Seulement j'obtiens invariablement la même sortie.

    Qu'est-ce que j'ai mal compris ? Là je ne vois pas.

    Merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Le fonctionnement que tu observes est dû à l'utilisation de lock.
    lock() autorise un seul thread à accéder au code Console.WriteLine().
    Chacun des autre threads est bloqué et attend la libération de la portion de code en question par le thread précédent.
    On peut considérer que lock maintient une FIFO des threads en attente.

    La priorité n'a pas d'influence puisque le thread de haute priorité passe son temps à attendre que les threads de basse priorité sortent de la portée de lock()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/07/2011, 16h09
  2. [XSLT] probleme de resultat retourné par une variable
    Par coucouA dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 16/08/2006, 11h05
  3. Comment remplacer un resultat numérique par son libellé ?
    Par bds2006 dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/06/2006, 11h03
  4. Quel resultat avec un group by pour plusieurs valeurs?
    Par sampq dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/12/2005, 12h08
  5. [LG]résultat renvoyé par une fonction
    Par le 27 dans le forum Langage
    Réponses: 3
    Dernier message: 10/12/2003, 10h31

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