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 :

Singleton et multithreading


Sujet :

C++

  1. #1
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut Singleton et multithreading
    Salut,

    Après une recherche sur le forum, sans succès, je viens donc vous poser ma petite question.

    Le contexte :
    Je vais développer un serveur. Je pensais à faire un thread par client, sachant qu'il n'y aura qu'entre 2 et 8 clients environ.
    Alors les clients intéragiront avec le serveur, et enverront des commandes qui entraineront que mon serveur modifiera une variable chez lui. Cette variable est un singleton.
    Or, comme les intéractions risquent d'être fréquentes(en effet, je pense environ à 2 requêtes par client par seconde, et ce pendant qqlq minutes(je prends de la marge), les mutex seraient probablement trop couteux et ralentiraient le tout, ce qui annulerait l'intérêt d'utiliser les thread ... ca reviendrait presque à traiter les clients itérativement dans un while, du point de vue lenteur.
    Alors, ma question est :
    Sachant que je vais probablement utiliser la méthode du double-check pour l'instanciation, je ne sais pas cependant comment faire pour que, lorsqu'un thread modifie la variable singleton, un autre ne la modifie pas en meme temps, ou presque, ce qui entrainerait un problème du genre une seule modification faite sur les 2 demandées, etc ... ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pour la récupération du singleton, le double-check est pratique, mais pas encore l'ultime. Pour la modification du singleton, ce n'est pas ce système qui te protègera, c'est à toi de protéger les routines critiques.

  3. #3
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Comment les protéger, sans mutex?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Avec des sections critiques, c'est plus léger, ou parfois des opérations atomiques si le compilateur y donne accès.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Pour les sections critiques j'ai vu que l'api WIN32 fournit des fonctions.
    Cependant, en vue d'une portabilité(au moins Windows/Unix), j'aimerais savoir s'il y a des libs qui fournissent ceci en "portable"?
    Boost::thread fournit des outils pour des sections critiques ou opérations atomiques?
    A propos, que sont les opérations atomiques et comment les réaliser?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Boost.Threads ne propose rien à ce niveau, elle est encore trop jeune, je pense, pour proposer suffisemment de fonctions pour le travail de tous les jours en multithreads.
    Les opérations atomiques sont des opérations que le processeur exécute en une seule fois, par exemple incrémentation et test. S'il ne les propose pas, on ne peut pas en créer. Dans Qt, ils ont un header spécial pour ces choses - qatomic.h -

  7. #7
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et donc niveau librairies portables proposant ce qu'il faut pour créér des sections critiques, qu'est-ce qu'on trouve?(si ça existe)

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Une question bête : les sections critiques, elles sont pas protégées avec des mutex ?

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Très pertinente la question Aucune idée.

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Eusebe
    Une question bête : les sections critiques, elles sont pas protégées avec des mutex ?
    Non, ce sont des objets _normalement_ plus légers, du moins pour autant que je sache !
    Des bibliothèques pour les sections critiques, je ne sais pas. Par exemple, je ne sais même pas si Linux en propose, je suppose que oui, mais je n'ai pas encore été confronté au fait.

  11. #11
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Une section critique, c'est du pur windows, c'est comme un mutex en plus léger, mais ça ne permet pas de lock inter process.

    Dans ton cas, une vingtaine de lock par seconde, je ne pense pas qu'il y ait de problèmes quelque soit la primitive de synchro utilisée.

    Les mécanismes de "double check", je m'en méfie comme de la peste, la plupart ne fonctionnent pas...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #12
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bon, ben pour les sections critiques, c'est résolu

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Il doit y avoir quelque chose sur le sujet dans Loki.

  14. #14
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Je viens d'aller voir Loki.
    En effet, et ça utilise des mutex, et apparemment ce sont bien des mutex que je vais utiliser.
    Ca suffira vous pensez? Après tout ca doit être bien fait les mutex... Pas si lent que ça.

    Donc, pour clore le sujet, je pense que je vais utiliser Boost.Thread... Vous avez mieux?

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est vrai que Loki propose des outils mieux adaptés pour les synchronisations !

  16. #16
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ah? en quoi ils sont mieux adaptés?
    C'est plus léger et plus rapide?

  17. #17
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    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 292
    Par défaut
    La référence, en matière d'articles et plus, c'est ACE. Tu y trouveras tout ce dont tu as besoin pour faire du réseau TR de façon portable. C'est surtout que la partie réseau et la partie thread ont été conçues pour travailler main dans la main. La doc est un peu chaude, de même que les articles (qui sont ultra spécialisés), mais il existe un très bon tutoriel dont j'avais déjà donné l'adresse ici-même.
    On peut critiquer le poids du bestio.

    Quand au double check, il fonctionne mal et ne sert pour pour la création de ton objet.
    Tu as plus vite fais d'avoir une fonction create(Params) dans ton singleton. fonction que tu appeleras dans le thread de démarrage de l'appli. Et une fonction instance() qui renvoie ton singleton. Après, suivant les besoins, tu peux avoir un mutex dans instance(), ou des mutex/locks qui distinguent les modes écrivains/lecteurs dans chacune des fonctions de ton singleton. A voir en fonction des rôles à remplir.
    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...

  18. #18
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Ok, merci beaucoup à tous, ça devrait aller là

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

Discussions similaires

  1. Singleton et multithreading
    Par alladdin dans le forum Langage
    Réponses: 8
    Dernier message: 29/07/2010, 23h31
  2. Singleton et multithread
    Par totoche dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/05/2010, 18h05
  3. [Singleton] singleton et multithreading
    Par behess dans le forum Design Patterns
    Réponses: 17
    Dernier message: 24/09/2009, 18h33
  4. Singleton et Multithreading
    Par behess dans le forum C#
    Réponses: 22
    Dernier message: 09/09/2009, 11h09

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