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

Threads & Processus C++ Discussion :

quelle est la différence entre les sections critiques et les mutex ?


Sujet :

Threads & Processus C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut quelle est la différence entre les sections critiques et les mutex ?
    Bonjour !
    Tout est dans le titre !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une section critique est une section de code dans laquelle il ne doit y avoir qu'un seul thread à la fois.

    Un mutex est un objet utilisé dans le contexte de programmation multi thread qui permet de garantir que un seul thread ou un seul processus possèdera le mutex. En général, un mutex sert à protéger une ressource critique (l'accès à un modem, l'écriture dans une mémoire partagée, et bien d'autres choses).

    Pour créer des sections critiques, on va les protéger par un objet qui va garantir qu'un seul thread se trouve a un instant donné dans cette section. L'objet qui va protéger la section critique peut être un mutex ou encore un sémaphore.

    Plus d'informations générales ici et
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Donc si je comprend bien, un mutex protège des ressources (des variables uniquement ?) et une section critique du code en général ?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Une section critique protège du code qui ne doit être exécuté simultanément que par 1 seul thread (voir exemple plus bas).

    Un mutex est un objet système qui ne peut être acquis que par un seul thread ou processus. Un mutex sert à protéger une ressource (hardware, variable, ...). Un mutex peut servir à créer une section critique.

    Cette fonction exemple est écrite en pseudo code. Si la fonction function_clignotante() doit être exécutée simultanément par 2 threads ou plus, la variable variable_a_proteger doit être protégée par une section critique sinon, cela ne va par bien marcher, les 2 (ou plus) threads simultanés vont se marcher dessus.

    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
    void function_clignotante(void)
    {
    // variable statique à proteger
    static int variable_a_proteger = 0;
     
       // prendre la section critique
       // si on ne peut pas la prendre, le thread "dort" jusqu'à ce que la section critique soit libre à nouveau
       // c'est le noyau qui reveille le thread lorsque la section critique est disponible à nouveau
       enter_critical_section();
     
       // a cet endroit, il est garanti qu'il n'y a qu'un seul thread dans le code
       // on peut donc travailler sur la variable sans problème
       if(variable_a_proteger == 0)
       {
          variable_a_proteger = 1;
          allumer_lampe();
       }
       else
       {
          variable_a_proteger = 0;
          eteindre_lampe();
       }
     
       // tres important, ne pas oublier de liberer la section critique
       // sinon, personne ne pourra plus travailler
       leave_critical_section();
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 112
    Points : 43
    Points
    43
    Par défaut
    Merci, je pense que c'est plus clair pour moi maintenant.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/06/2011, 20h56
  2. Quelle est la différence entre les fonctions Hxxxx et SQLxxxx?
    Par THOMAS Patrice dans le forum WinDev
    Réponses: 2
    Dernier message: 30/07/2010, 12h40
  3. Réponses: 8
    Dernier message: 17/05/2006, 11h51

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