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 :

Section critique utile?


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Section critique utile?
    Salut !
    Dans mon application j'ai deux threads qui s'occupe d'ouvrir une instance Outlook et Excel et de travailler avec eux.
    Dans la procédure execute de mes threads, je créer une section critique et je lance d'autre procédures.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CS.enter;
    treatment; //procédure de traitement
    cs.leave;
    Mais est elle vraiment utile ?
    Ou dois-je mettre cette section critique directement dans mes procédures de traitement?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure thread.treatment;
    begin
    cs.enter;
    //traitement etc...
    cs.leave;
    end;
    Merci de m'éclairer

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Salut,

    Je vois pas la différence entre les deux, puisque à chaque fois tu exécute les actions dans le même ordre.

    En revanche, tu dois le savoir, il te placer ta section critique à chaque fois que tu veux modifier une ressource qui risque d'être employées (et surtout modifier) par plusieurs thread, et ce afin de ne pas risquer de rendre la main à d'autres thread avec une ressource dans un état "intermédiaire" indésirable.
    Et donc, chaque fois qu'un thread execute le code placé dans ta section critique il bloque irrémédiablement tous les autres threads associés à la même ressource jusqu'à ce cette ressource soit de nouveau libre d'accès...Donc essaye toujours de mettre le moins de ligne de code(machine) possible dans ta section critique afin de conserver un fonctionnement multi-tâche important.

    Pour résumé, si un de tes threads se situe entre CS.enter et cs.leave, alors tous tes autres thread qui arriveraient devant CS.enter resteront en attente à ce point là en attendant la libération de ta ressource par ton premier thread...

    A+.
    For crying out loud !

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Je préconiserais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure thread.treatment;
    begin
      cs.enter;
      try
        //traitement etc...
      finally
        cs.leave;
      end;
    end;
    Ensuite, la section critique est-il utile ? impossible de répondre à ta question, on ne connait pas les traitement ...

    Sinon, tu peux aussi regarder le TMultiReadExclusiveWriteSynchronizer, il pourrait éviter trop de bloquage ...
    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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Merci les gars, j'en déduis qu'elle est utile car mon but est de bloquer les autres threads

    Oui ShaiLeTroll, j'utilise le try..finally je l'ai juste pas mis dans l'exemple de code

    C'est pratique ces ptits trucs là!
    Bonne journée !

  5. #5
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Si tu souhaite bloquer tes threads (sans prendre en compte l'accès au ressources) à un endroit donner, autant utiliser les Semaphores qui sont prévus à cet effet.

    A+.
    For crying out loud !

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

Discussions similaires

  1. Problème d'include avec une section critique.
    Par radicalrider dans le forum Visual C++
    Réponses: 21
    Dernier message: 12/07/2006, 15h38
  2. [VB.NET] Remplacement de fichier, section critique
    Par leSeb dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/03/2006, 14h34
  3. section critique "static" ou pas?
    Par giova_fr dans le forum Windows
    Réponses: 2
    Dernier message: 01/01/2006, 13h15
  4. [Delphi 6] Problème de section critique
    Par Desraux dans le forum Langage
    Réponses: 8
    Dernier message: 08/12/2005, 14h13
  5. [Kylix] Section critique
    Par rahimk dans le forum EDI
    Réponses: 5
    Dernier message: 23/11/2005, 12h18

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