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 :

partager l'instance d'une classe entre plusieurs thread ?


Sujet :

Threads & Processus C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut partager l'instance d'une classe entre plusieurs thread ?
    Bonjour,

    Si je crée une instance d'une classe et que je passe un pointeur vers cette classe à plusieurs thread est ce qu'il faut que je protège l'accès simultanée aux fonctions de A par des mutex ou ca dépends de ce que font ces fonctions ?

    Dans le cas ou il faut protéger par mutex, est ce qu'il vaut mieux que ce soit la classe qui gère ses propres mutex (lock en début de fonction et unlock en fin) ou est ce qu'il vaut mieux que ce soit l'appelant qui fasse le lock ?

    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 343
    Points : 36 864
    Points
    36 864
    Par défaut ca dépends de ce que font ces fonctions...
    Et plus précisément des variables qu'elles modifient.
    Il faut en général "sérialiser" les séquences { lecture, modification, écriture } de ces variables (par exemple via un "mutex").
    Comme le code appelant n'a pas à s'occuper de l'implantation du code appelé, cette sérialisation doit être faite dans les méthodes de l'objet.
    - W

  3. #3
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    A priori, je dirais que des fonctions qui ne font que renvoyer des données (copies ou non) sans en modifier le contenu (= fonctions const) n'ont pas besoin d'être protégées.
    MAIS si un thread modifie une variable membre de ta classe pendant qu'un autre la lit, tu risques d'avoir des problèmes .

    Conclusion : protège toutes tes fonctions par des sections critiques.

    Citation Envoyé par pasdeface
    Dans le cas ou il faut protéger par mutex, est ce qu'il vaut mieux que ce soit la classe qui gère ses propres mutex (lock en début de fonction et unlock en fin) ou est ce qu'il vaut mieux que ce soit l'appelant qui fasse le lock ?
    C'est la zone qui risque d'être appelée plusieurs fois qui doit être protégée, pas les appels. Le appels venant de threads différents à des endroits différents, un appel à ta classe A d'un même thread n'arrivera qu'une fois. (euh c'est clair ça ?)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    merci pour vos réponse

    Mais

    Citation Envoyé par spoutspout Voir le message
    C'est la zone qui risque d'être appelée plusieurs fois qui doit être protégée, pas les appels. Le appels venant de threads différents à des endroits différents, un appel à ta classe A d'un même thread n'arrivera qu'une fois. (euh c'est clair ça ?)
    Pas trop

    Oui un appel à A d'un même thread n'arrive qu'un fois, mais ça n'empeche pas d'avoir un mutex partagé entre tous les thread qui bloque l'appel à A, si c'est ce dont tu parlais ?

  5. #5
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par pasdeface Voir le message
    Oui un appel à A d'un même thread n'arrive qu'un fois, mais ça n'empeche pas d'avoir un mutex partagé entre tous les thread qui bloque l'appel à A, si c'est ce dont tu parlais ?
    Non, mais je rejoins wiztricks à ce propos:
    Citation Envoyé par wiztricks
    Comme le code appelant n'a pas à s'occuper de l'implantation du code appelé, cette sérialisation doit être faite dans les méthodes de l'objet.
    De plus, ce mutex ne fait que rajouter un niveau entre ta classe A et tes threads. L'avantage de la section critique à l'intérieur des fonctions de ta classe A, c'est que si jamais un autre thread doit utiliser ta classe, tu n'auras pas à rajouter la gestion du mutex pour ce nouveau thread. Tout sera déjà fait dans la classe A !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Points : 406
    Points
    406
    Par défaut
    oui j'avais bien compris ça, mais c'est ta phrase que j'avais pas bien comprise.

Discussions similaires

  1. Accès aux données d'une classe par plusieurs threads
    Par Dalini71 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 08/12/2013, 07h23
  2. Partager une variable entre plusieurs classes
    Par jasonpolakow dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/01/2011, 10h02
  3. partage d'une variable entre plusieurs threads
    Par baedal dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 27/02/2008, 20h33
  4. Réponses: 12
    Dernier message: 14/08/2006, 12h55
  5. Partager une version entre plusieurs DLL
    Par barthelv dans le forum MFC
    Réponses: 4
    Dernier message: 22/11/2005, 10h25

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