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

Delphi Discussion :

TCriticalSection : j'ai besoin d'un conseil pour son bon usage !


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 065
    Par défaut TCriticalSection : j'ai besoin d'un conseil pour son bon usage !
    Bonjour,

    A votre avis, dans un setter, est-il risqué de faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TStefThread.SetGroupage(Value: Boolean);
    begin
      if FGroupage <> Value then
      begin
        FLogLock.Enter;
        try
          FGroupage := Value;
        finally
          FLogLock.Leave;
        end;
      end;
    end;
    Ou plutôt, impérativement, comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TStefThread.SetGroupage(Value: Boolean);
    begin
      FLogLock.Enter;
      try
        if FGroupage <> Value then
          FGroupage := Value;
      finally
        FLogLock.Leave;
      end;
    end;
    Est-il judicieux de "consommer" un TCriticalSection, si le test "FGroupage <> Value" renvoi FALSE ?

  2. #2
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 187
    Par défaut
    La question n'est pas de "consommer" ou pas un TCriticalSection (qui n'est qu'un simple verrou en réalité)
    La question c'est à quoi sert ce test ?
    Si Value=FGroupage alors la valeur ne change pas !!! Du coup quel est l'intérêt de ce test dans les deux cas ?

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    La logique est de protéger la lecture et l'écriture puisque dans le premier exemple FGroupage pourrait déjà avoir changé entre le test et le verrou.

    Et ne pas oublier de le faire au niveau du getter aussi. Protéger uniquement le setter n'aurait pas de sens

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 065
    Par défaut
    Si je comprend bien il faut protéger la variable même en lecture seul.

    Merci pour vos réponses.

  5. #5
    Membre émérite Avatar de sergio_is_back
    Homme Profil pro
    Consultant informatique industrielle, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Consultant informatique industrielle, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 187
    Par défaut
    Citation Envoyé par der§en Voir le message
    Si je comprend bien il faut protéger la variable même en lecture seul.

    Merci pour vos réponses.
    Normalement OUI !

    L'utilisation de CriticalSection.Enter & Release n'est pas forcément très pénalisant, sauf si tu beaucoup de threads et que tu souhaite te rapprocher du temps réel, ou avoir des temps de cycle extrêmement courts

  6. #6
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 065
    Par défaut
    Citation Envoyé par sergio_is_back Voir le message
    Normalement OUI !

    L'utilisation de CriticalSection.Enter & Release n'est pas forcément très pénalisant, sauf si tu beaucoup de threads et que tu souhaite te rapprocher du temps réel, ou avoir des temps de cycle extrêmement courts
    C’est exactement, ma problématique, d’où ma question !

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Sinon plus compact InterlockedExchange ou AtomicExchange et InterlockedCompareExchange avec le type BOOL (LongBool)

    Même si pour un Boolean, avec seulement deux états, la collision de valeur c'est plus savoir si il y a eu rétention lors du Setter.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. J'ai besoin de vos conseils pour mon site chez-Gaëlle
    Par Gaëlle71 dans le forum Mon site
    Réponses: 2
    Dernier message: 30/04/2007, 23h09
  2. Réponses: 4
    Dernier message: 17/04/2007, 19h04
  3. [Mail] Besoin d'un conseil pour l'envoi d'e-mail
    Par olive_le_malin dans le forum Langage
    Réponses: 1
    Dernier message: 21/12/2006, 11h39
  4. Besoin de quelques conseils pour un script java
    Par poussin544 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2006, 10h41
  5. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10

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