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 :

Membre Static d'une classe


Sujet :

C#

  1. #1
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut Membre Static d'une classe
    Bonjour,
    j'aimerai bien comprendre comment se fait l'accès par défaut à un membre static. autrement dit est il nécessaire de déclarer le membre volatile pour permettre l'accès à plusieurs threads en même temps ?

  2. #2
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    Bon je l'ai déduit en actant des cas exemples.

    Merci bien

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Volatile n'apporte pas grand chose tu peux y accéder depuis plusieurs threads sans
    Par contre il faudra peut être mette un mécanisme de thread safe selon ton utilisation

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Non, le mot clé volatile n'est pas requis pour l'utilisation d'une variable statique par plusieurs thread.

    C'est un mot clé rarement utilisé, car rarement nécessaire. En effet, généralement, lorsqu'une variable peut être accédée par plusieurs threads, ses accès son protégé par un mécanisme comme un mutex, qui garantie qu'un thread manipulant une variable a un instant donné est le seul à cet instant précis.

    Le mot clé volatile n'est utile que si un tel mécanisme de protection n'est pas mis en place, et pour s'assurer que toutes modifications de la variable par un thread soit immédiatement prise en compte par le second thread. Un exemple classique est l'attente active

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // sto pest une variable globale
    //bool stop;
     
    // thread 1
    stop = false;
    while (!stop) { }
     
    // thread 2
    ...
    stop = true
    ...
    Ici, sans le mot clé, la boucle du thread 1 a de très grande chance de ne jamais s'arrêtée en cas d'optimisation du code, même une fois que le thread 2 aura changé la valeur de la variable stop à true, car la valeur de la variable peut avoir été mise en cache. Avec le mot clé volatile, on s'assure que chaque accès à la variable est faite depuis la mémoire, assurant ainsi qu'il s'agit bien de la valeur courante.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Jamais faut pas exagérer non plus je pense, moi j'avais lu pas aussi immédiatement, mais que ca restait au poullième de seconde.
    D'ailleurs nous n'avons pas ce mot clé en vb et un booléen multithreadé a toujours débloqué une boucle ...

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Jamais faut pas exagérer non plus je pense, moi j'avais lu pas aussi immédiatement, mais que ca restait au poullième de seconde.
    D'ailleurs nous n'avons pas ce mot clé en vb et un booléen multithreadé a toujours débloqué une boucle ...
    Non non, j'ai bien dis "jamais". Les optimisations peuvent parfois générer des comportements inattendu ! Et c'est le genre de problème très difficile à découvrir lorsqu'il se produit.

    [EDIT]
    Pour parfaire mes propos, voici un code d'exemple en C#
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
     
    namespace MotCleVolatile
    {
        class Program
        {
            private bool stop;
     
            static void Main(string[] args)
            {
                var test = new Program();
     
                new Thread(delegate () { Thread.Sleep(1000); test.stop = true; }).Start();
     
                while (!test.stop) ;
                Console.WriteLine("OK");
            }       
        }
    }
    Exécuter ce code sans optimisation ne génère pas de problème chez moi. Exécuter ce code avec les optimisations activées génère une boucle infinie. Donc... jamais est tout à fait d'actualité.
    [/EDIT]

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    Une fois de plus tu nous est bien utile, merci d'être là ^^

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Points : 10 543
    Points
    10 543
    Billets dans le blog
    21
    Par défaut

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

Discussions similaires

  1. [WD17] poo : comportement des membres globaux (static) d'une classe
    Par lmontout dans le forum WinDev
    Réponses: 5
    Dernier message: 26/12/2012, 12h21
  2. utiliser les méthodes d'un membre static d'une classe
    Par tonio_a_588 dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2011, 21h44
  3. Appel membre static dans une autre classe
    Par cyriltec dans le forum C#
    Réponses: 2
    Dernier message: 12/04/2010, 11h23
  4. Membres statiques d'une classe et erreur de linkage
    Par Neilos dans le forum C++Builder
    Réponses: 10
    Dernier message: 09/02/2006, 23h06
  5. membre statique dans une classe
    Par motrin dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/12/2005, 15h15

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