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 :

[Multithreading] Initialisation de variables local static en multithread


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par d�faut [Multithreading] Initialisation de variables local static en multithread
    Je voulais savoir si le code suivant etait thread safe ou bien si je suis oblige de passer les initialisations des statiques en variables globales :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void test(int connectionsNb)
    {
    	static bool dbPoolInitialized = false;
    	static pthread_mutex_t poolMutex = PTHREAD_MUTEX_INITIALIZER;
    	int iConnection = 0;
     
    	LOCK(&poolMutex);
     
    	if (!dbPoolInitialized)
    	{
                   ...
     
    		dbPoolInitialized = true;
    	}
     
    	UNLOCK(&poolMutex);
    }

  2. #2
    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 : 51
    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
    Je ne connais pas les pthread, ni ce que font LOCK et UNLOCK, difficile donc de r�pondre, mais si j'ai bien compris ta question :
    La fonction test va �tre appel�e depuis plusieurs threads sans avoir de de protection externe. Va-t-il y avoir un probl�me pour l'initialisation des variables statiques ?

    Il n'est pas possible de te r�pondre dans le cadre du C++ actuel, car il ne connais pas la notion de multithread. Ce que je peux te dire, c'est que dans le cadre de C++0x :
    Citation Envoy� par C++0x 6.7/4
    The zero-initialization (8.5) of all local objects with static storage duration (3.7.1) or thread storage duration (3.7.2) is performed before any other initialization takes place. Constant initialization (3.6.2) of a local entity with static storage duration, if applicable, is performed before its block is first entered. [...]
    If control enters the declaration concurrently while the object is being initialized, the concurrent execution shall wait for completion of the initialization. If control re-enters the declaration recursively while the object is being initialized, the behavior is undefined.
    Donc �a marchera.

    Maintenant, comment se comporte actuellement le compilateur que tu utilises, je ne sais pas. Peut-�tre la norme Posix impose-t-elle des choses l� dessus, mais je l'ignore.
    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.

  3. #3
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par d�faut
    LOCK et UNLOCK sont equivalents a respectivement :
    pthread_mutex_lock et pthread_mutex_unlock.
    J'utilise gcc.

    D'apres ce que tu as cite, j'en deduis que ma fonction est thread safe mais pas reentrante, donc ca me suffit.
    Et puis il s'agit de zero initialisation, donc c'est mon cas dans l'exemple que j'ai cite.

    Merci.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 11/11/2008, 12h40
  2. Initialiser une variable static
    Par mamelouk dans le forum D�buter
    R�ponses: 15
    Dernier message: 31/07/2008, 17h48
  3. R�ponses: 7
    Dernier message: 15/11/2007, 14h41
  4. variable locale dans une Application multithreading
    Par dev1980 dans le forum Servlets/JSP
    R�ponses: 3
    Dernier message: 13/06/2007, 12h59
  5. [VB6]Initialiser une variable Static dans un �venement
    Par loverdose dans le forum VB 6 et ant�rieur
    R�ponses: 16
    Dernier message: 20/01/2005, 14h57

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