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 :

Concurrence et Programmation par contrat.


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut Concurrence et Programmation par contrat.
    Bonjour,
    Peut-on dire les choses suivantes dans le cadre de la programmation par contrat :
    -> Une fonction ré entrante : les invariants sont préservés pendant toute la durée de la fonction.
    -> Une fonction Thread-safety : les invariants peuvent être rompus au sein d'une section protégée (mutex/section critique, etc.).

    On sent un certain flottement dans la définition de réentrance vis à vis de thread-safety. Aussi, je me demandais si cette approche ne permet pas de bien comprendre la différence.

    Ai-je tout faux ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bon, je crois que j'ai faux
    La réentrance est en général définie comme la possibilité d'appeler une même fonction avec des paramètres différents. Donc, je peux très bien casser quelques invariants de mon objet courant pendant l'exécution de cette fonction sur celui-ci et appeler la fonction sur un autre objet. Cela va plus être lié aux éventuels variables statiques de la classe (ou variables globales).
    A l'inverse une fonction thread-safe doit pouvoir être appelée par plusieurs threads sur le même objet. J'ai donc pas trop intérêt à casser les invariants...

    A votre avis, comment s'articulent les invariants avec la réentrance et le thread-safety ?

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Si tu comprends l'anglais, ceci peut te donner à réfléchir:
    http://blogs.msdn.com/oldnewthing/ar...29/168719.aspx

    Le problème, c'est que dès qu'on se met à parler d'autres choses que des variables globales/statiques, la notion devient floue : Une fonction agissant sur deux objets pourrait être dite thread-safe sur un des objets et pas l'autre!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Merci pour le lien. J'étais déjà tombé dessus. Et sur bien d'autres. Ce qui m'a justement amené à penser que cette notion de réentrance (à l'origine venant du monde de la programmation système et applicable dans le cadre des interruptions) avait du mal à être consensuellement définie dans le cadre de la programmation concurrente. A la limite, thread-safe parait plus facile à définir : grossièrement thread-safe = pas de race conditions -> utilisation de verrous si nécessaire.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    "reentrant" marche bien dans le cadre de la prog concurrente : il n'y a pas d'effet de bord visible (ou plutôt de type aberrant/tombe en marche) sur le résultat de la fonction à cause d'exécutions parallèles de celle-ci.

    Dès que tu as un état partagé (var globale/statique, ou membre) qui peut évoluer et influencer le résultat pour produire des sorties indésirables, ce n'est pas réentrant.
    J'ai tendance à considérer, à tord peut-être, qu'une fonction qui trace son nombre max d'exécutions parallèles comme "réentrante" si elle est justement capable de sortir ce nombre max.

    EDIT: Hum ... on retrouve la notion de MT-safe -- BTW, plutôt que les locks les TSS/TLS marchent bien aussi.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    "reentrant" marche bien dans le cadre de la prog concurrente : il n'y a pas d'effet de bord visible (ou plutôt de type aberrant/tombe en marche) sur le résultat de la fonction à cause d'exécutions parallèles de celle-ci.
    Cette définition est un peu forte par rapport à ce qu'on trouve dans la littérature. "Pas d'effet de bord sur le résultat si exécution //" -> Il suffirait alors de protéger l'accès aux variables globales pour qu'une fonction soit réentrante. On trouve plutôt une distinction :
    -> réentrant = peut être appelée concurremment avec des jeu de données différents (donc pas d'état partagé) + peut avoir des appels imbriqués dans une même tâche
    -> thread-safe = peut être appelée concurremment avec un jeu de données identique + la garantie n'est assurée à priori que sur des tâches différentes


    Citation Envoyé par Luc Hermitte Voir le message
    Dès que tu as un état partagé (var globale/statique, ou membre) qui peut évoluer et influencer le résultat pour produire des sorties indésirables, ce n'est pas réentrant.
    C'est souvent présenté comme 'une fonction réentrante ne dépend que des paramètres qu'elle prend en entrée et ne retourne en sortie rien d'interne/globale. Une fonction réentrante est une fonction 'sans mémoire'.

    Citation Envoyé par Luc Hermitte Voir le message
    J'ai tendance à considérer, à tord peut-être, qu'une fonction qui trace son nombre max d'exécutions parallèles comme "réentrante" si elle est justement capable de sortir ce nombre max.

    Citation Envoyé par Luc Hermitte Voir le message
    EDIT: Hum ... on retrouve la notion de MT-safe -- BTW, plutôt que les locks les TSS/TLS marchent bien aussi.
    Google + TSS = "Tout Sauf Sarkosy"
    Google + TLS = "Transport Layer Security"
    J'imagine que ce n'est pas tout à fait de ce sens dont tu parles...
    Entres parenthèses, lock : facilité de langage car partagé par tous ceux qui font du multi-thread (MT).

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

Discussions similaires

  1. Programmation par contrat en C++
    Par bolhrak dans le forum C++
    Réponses: 11
    Dernier message: 07/09/2007, 00h12
  2. [Language]Programmation par contrat
    Par manube dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 10h16
  3. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    Réponses: 1
    Dernier message: 02/05/2005, 20h05
  4. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    Réponses: 6
    Dernier message: 26/07/2004, 11h06

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