Partage
  • Partager sur Facebook
  • Partager sur Twitter

Difference entre mutex et condition

    20 mai 2018 à 20:16:06

    Bonjour,

    Je lis actuellement le cours sur la programmation système en c et en particulier la partie sur les threads et j'ai du mal à comprendre la différence entre le mutex et la condition.

    Pourquoi pthread_mutex_t et pthread_cond_t semblent toujours associés ? Ne peut on pas se contenter d'un seul de ces deux types pour synchroniser les threads?

    Autrement dit ne peut on pas simplement utiliser pthread_cond_signal dans un thread et pthread_cond_wait dans l'autre pour les synchroniser plutôt que l’enchaînement fermer mutex-> condition-> ouvrir mutex ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2018 à 17:47:15

      Depuis le man :

      Une variable condition doit toujours être associée à un mutex, pour éviter les accès concurrents où un thread se prépare à attendre une condition et un autre signale la condition juste avant que le premier n'attende réellement.

      • Partager sur Facebook
      • Partager sur Twitter
      Si debugger, c’est supprimer des bugs, alors programmer ne peut être que les ajouter - Edsger Dijkstra
        27 mai 2018 à 20:41:09

        Bonjour,

        Les mutex, ça permet à plusieurs thread d'accéder de manière sûre à une ressource partagée. Les threads peuvent alors vivre leur vie indépendamment l'un de l'autre. Mais échanger des données par cette méthode est loin d'être optimal et en plus aucun moyen d'effectuer des demandes instantanées.
        Est-ce qu'un simple mécanisme avec un thread en attente et un autre émetteur d'un signal a un sens? Oui, tout à fait, tu as raison.
        Mais si on regarde des cas concrets, on se rend vite compte qu'après être réveillé un thread va vouloir savoir pourquoi on l'a réveillé et donc lire des données provenant d'autres threads. Et n'utiliser le mutex qu'après amène des problèmes de cohérence, voire des non sens.
        Inversement avoir une fonction d'attente garantie dans une zone protégée permet d'avoir le mécanisme de communication le plus simple et le plus rapide qu'il soit.

        On peut donc utiliser une fonction wait avec un mutex bidon pris juste avant et rendu juste après, ça fonctionne; Mais finalement c'est extrêmement rare alors il n'y a pas intérêt d'avoir un objet dédié à cela.

        La variable conditionnelle est finalement très pratique et très puissante. On considère souvent que l'objet de communication le plus simple est le sémaphore, pourtant c'est facile à fabriquer avec une variable conditionnelle.

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

          28 mai 2018 à 9:24:21

          bouclePouvoir a écrit:

          Autrement dit ne peut on pas simplement utiliser pthread_cond_signal dans un thread et pthread_cond_wait dans l'autre pour les synchroniser plutôt que l’enchaînement fermer mutex-> condition-> ouvrir mutex ?

          Tu considères le cas très particulier où il n'y a que deux travailleurs dans l'histoire, mais si tu balances un signal pour réveiller plusieurs personnes susceptible de faire un job particulier, mieux vaut qu'ils reprennent leurs mutex avant de commencer à bosser. Après, il y a aussi le fait que cela améliore la modularité de l'ensemble : on a les questions de mutex et de conditions qui sont des tâches distinctes et donc des éléments sémantiques distincts dans le programme. D'autant que ça apporte aussi la possibilité d'agir sur la condition par l'intermédiaire du mutex, etc.

          Finalement dernière remarque : le mutex pour la concurrence, c'est un peu la solution du pauvre, il y a des techniques globalement plus sympa pour faire ce genre de tâches. D'une part le mutex sert généralement à réinventer la roue pour des choses qui existent depuis un bail (canal de communication sous la forme de moniteurs, modèles n-lecteur/n-écrivains ou n-prod/n-cons, bref, que des trucs qui existent), et d'autre part, pour les tâches de bas niveau, il y a les low-level atomics qui permettent plus de performances. Donc bon les mutex, c'est très rare d'en avoir vraiment besoin.

          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            1 juin 2018 à 8:10:43

            Si tu veux un exemple, il y à le diner des philosophes qui explique pourquoi il faut avoir des mutex et de conditions (je trouve que c'est plutôt claire)
            • Partager sur Facebook
            • Partager sur Twitter

            la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

            Mon GitHub

            Difference entre mutex et condition

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown