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

Langage C++ Discussion :

static + REENTRANT


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut static + REENTRANT
    Bonjour,

    Je me pose des questions concernant l'utilisation des méthodes statiques dans un contexte multithread.

    La définition du mot clé REENTRANT dans le préprocesseur garantit que ces méthodes seront thread-safes.

    N'est-ce valable qu'avec gcc ? J'utilise en fait VisualStudio2008, et je n'ai pas trouvé l'équivalent !

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je n'en connais pas non plus (à part la relecture de code).

    Pour être réentrante, une fonction statique ne doit pas modifier de variables globale et/ou statiques ou alors cette variable doit être protégée par une section critique.

    D'ailleurs, je me demande si fonction réentrante et fonction thread-safe sont bien équivalents ou bien s'il y a des nuances subtiles.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Je ne connais pas ce mot clef, mais une fonction réentrante, c'est plus que thread safe. Une fonction récursive par exemple et réentrante... Il ne peut pas y avoir de lock/mutex dans une fonction réentrante. Elle peut donc aussi être appelé par une ISR. Enfin, sous mesure que je me plante pas >< !

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Par défaut
    Donc si j'ai une méthode statique bien écrite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static void MaFonctionStatique( ... mes parametres ... )
    {
      // j'utilise 'mes parametres';
      // ...
    }
    qu'il y ait ou non une compilation REENTRANT n'a pas d'incidence.

    Par contre si j'utilise une ressource partagée, il doit quand même moyen de se passer des mutex ! C'est une histoire de compilo, non ? Je vais regarder du côté d'Intel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    static maVariablePartagee;
    static void MaFonctionStatique()
    {
      // j'utilise 'maVariablePartagee';
      // ...
    }

  5. #5
    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
    Salut,
    Citation Envoyé par jamin Voir le message

    Par contre si j'utilise une ressource partagée, il doit quand même moyen de se passer des mutex ! C'est une histoire de compilo, non ? Je vais regarder du côté d'Intel.
    Pas à l'heure actuelle. La notion d'atomicité n'existe pas encore en C++ donc tout accès concurrent à une ressource est susceptible de provoquer une race condition.
    Ensuite, cela dépend beaucoup de ton problème. Si tous les threads ne font que des accès en lecture, ben effectivement pas besoin de mutex. etc...
    réentrance et thread safe ont souvent tendance à être interprétées différemment par chacun. Je te donne mon point de vue :

    Dans le cadre de la programmation concurrente, une fonction réentrante est une fonction qui peut être exécutée correctement par plusieurs threads en même temps ou par le même thread avec des paramètres différents.

    Une fonction est thread-safe si elle peut être appelée correctement par plusieurs threads distincts en même temps avec les mêmes paramètres.

  6. #6
    Membre chevronné Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Par défaut
    Citation Envoyé par jamin Voir le message
    Par contre si j'utilise une ressource partagée, il doit quand même moyen de se passer des mutex ! C'est une histoire de compilo, non ? Je vais regarder du côté d'Intel.
    Comme dit précemment, on ne peut faire apelle au mutex. Sinon, lorsque le même thread re-rentre dans la fonction, tu fais comment ?

    Mais as-tu vraiment besoin d'une fonction réentrante ? Le thread-safe ne suffit pas ?

  7. #7
    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 Lavock Voir le message
    Comme dit précemment, on ne peut faire apelle au mutex. Sinon, lorsque le même thread re-rentre dans la fonction, tu fais comment ?
    Si on prend la définition de réentrant comme une fonction qui peut être exécutée correctement par plusieurs threads en même temps ou par le même thread avec des paramètres différents ; alors les mutex ne servent à rien.

Discussions similaires

  1. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 17h12
  2. Problème avec l'option -static de gcc
    Par lsdInside dans le forum Linux
    Réponses: 2
    Dernier message: 08/05/2004, 01h01
  3. [Débutant(e)] JSP utilisation static....une autre
    Par tcgenrecom dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/03/2004, 15h27
  4. Mais que fait static ???
    Par elsargento dans le forum C
    Réponses: 4
    Dernier message: 25/09/2003, 09h55
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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