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 :

[MT] Quid des variables statiques en multithread?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut [MT] Quid des variables statiques en multithread?
    Je voudrais "multithreader" un programme, mais y'a quelques variables statiques que je ne peux/veux pas ôter.
    Comment faire pour que chaque thread ait ses propres données statiques et éviter ainsi les conflits?

    J'ai vu le "Thread Local Storage" (TLS) sous Visual, mais ça m'a pas l'air applicable à d'autres systèmes.

    Vos suggestions doivent être dans la mesure du possible:
    -applicables sous différents systèmes (Windows,Linux,Unix)
    -faciles à mettre en oeuvre

    Merci par avance!

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 125
    Par défaut
    tu peux imaginer un classe singleton qui renvoie une instance en fonction du numero de thread

  3. #3
    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
    J'ai vu le "Thread Local Storage" (TLS) sous Visual, mais ça m'a pas l'air applicable à d'autres systèmes.
    C++ n'a aucune notion de multithreading, donc tout ce que tu fais dépend du système.

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    En C++ toute variable statique (quelle soit de portée globale ou de classe) existe une et une seule fois pour l'ensemble d'un programme.

    Donc avoir une variable statique (unique) dupliquée autant de fois qu'il y a de thread, ce n'est pas possible.

    Le meilleur moyen pour cela c'est de créer une classe qui ressemble à ce que fait un Singleton (comme là dit alskaar), mais qui se rapproche plus d'un Proxy avec allocation à la demande indexé par ton ThreadID courant (qui peut toujours être récupéré simplement quelque soit l'architecture). Pour rechercher l'association ThreadID <-> Instance Singleton, utilise un std::map.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Je sais bien tout ce que vous me dites.
    Mais je crois bien savoir qu'il existe un truc standard (probablement POSIX) qui gère les variables globales/statiques pour différents threads. Certes, c'est du C. Mais j'arrive pas à le retrouver. J'espérais que l'un d'entre vous le connaisse...

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Finalement, après quelques recherches, il semble que le TLS soit intégré à la plupart des compilos (peut-être même tous).
    La syntaxe varie peut-être un peu d'un compilo à l'autre, mais rien qu'une ou deux macros ne puissent corriger.
    Je préfère utiliser le TLS plutôt que tout reprogrammer moi même...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/12/2014, 00h37
  2. A propos des variables statiques
    Par gene69 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 20/08/2011, 18h25
  3. Réponses: 16
    Dernier message: 09/08/2010, 11h14
  4. Utiliser des variables statiques pour des paramètres
    Par el_slapper dans le forum VB.NET
    Réponses: 4
    Dernier message: 11/03/2008, 08h55
  5. Initialiser des variables dans une méthode Statique
    Par ero-sennin dans le forum Langage
    Réponses: 10
    Dernier message: 07/12/2007, 15h26

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