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 Delphi Discussion :

CriticalSection : que se passe-t-il si ?


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Points : 150
    Points
    150
    Par défaut CriticalSection : que se passe-t-il si ?
    Bjr

    En regardant la doc Delphi sur l'utilisation des sections critiques je me suis posé une question.

    Que sa passe-t-il si un thread détruit une section critique alors qu'un autre est en attente d'acquisition de la même section donc bloqué dans un appel à EnterCriticalSection ?

    Ne vaut-il pas mieux toujours utiliser TryEnterCriticalSection ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    après avoir l'aide dans le SDK sur les sections critiques, rien n'est indiqué en cas d'erreur sur la lecture des sections critiques par les routines tant en code d'erreur que d'exception.

    Donc pour moi que ce soit l'une ou l'autre des méthodes, je pense que tu auras une exception si une section critique est en tentative d'accès par un thread tandis qu'un autre thread la détruit.

    Donc le mieux reste de se débrouiller pour faire en sorte que la section critique ne soit détruite qu'à un instant où l'on est sûr qu'il n'y a pas d'accès concurrents possibles.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Bonjour,

    après avoir l'aide dans le SDK sur les sections critiques, rien n'est indiqué en cas d'erreur sur la lecture des sections critiques par les routines tant en code d'erreur que d'exception.

    Donc pour moi que ce soit l'une ou l'autre des méthodes, je pense que tu auras une exception si une section critique est en tentative d'accès par un thread tandis qu'un autre thread la détruit.

    Donc le mieux reste de se débrouiller pour faire en sorte que la section critique ne soit détruite qu'à un instant où l'on est sûr qu'il n'y a pas d'accès concurrents possibles.

    Je n'ai pas regardé le code mais à mon sens tu ne peux détruire une section critique étant en était "actif" (tu dois te taper une exception). Du coup lorsque ta thread qui veut détruire la section critique va faire le 'Leave' nécessaire au préalable l'autre thread en attente va immédiatement récupérer la section critique et empêcher la première de la libérer...

    je regarde le source et te confirme (mais ça me semblerait logique que cela fonctionne ainsi)

    [Edit] : Je suis con si tu as posé la question c'est qu'il n'y a pas de source

    [Edit2] "The DeleteCriticalSection function releases all resources used by an unowned critical section objec" => donc en gros il faut bien que la section critique ne soit pas acitve, par contre si elle est active alors l'aide ne dis pas ce qui se passe : exception, attente ?

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par phplive Voir le message
    Que sa passe-t-il si un thread détruit une section critique alors qu'un autre est en attente d'acquisition de la même section donc bloqué dans un appel à EnterCriticalSection ?
    La réponse est donnée par la MSDN à propos de EnterCriticalSection

    If a critical section is deleted while it is still owned, the state of the threads waiting for ownership of the deleted critical section is undefined.
    Autrement dit, à toi de te débrouiller pour que ça n'arrive pas car le résultat est indéfini. Tu auras probablement un comportement différent selon que la section critique soit supprimée au moment ou où le deuxième thread était en attente sur le spin-lock (Access Violation ? Bon je ne pense pas dans la pratique, mais sur le principe ça devrait) ou sur le sémaphore associé. Voir tu auras peut-être un comportement différent d'une machine et d'un OS à l'autre...

    De toute façon, si tu te retrouve dans ce cas de figure, c'est une erreur de conception. Comment fera de deuxième thread pour libérer la section critique une fois acquise si un autre l'a détruite pendant ce temps ?

  5. #5
    Membre habitué Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Points : 150
    Points
    150
    Par défaut
    Bsr

    Bon donc faut faire en sorte que ça ne se produise pas

    Merci

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

Discussions similaires

  1. Que se passe t-il sans fonction exit?
    Par Poseidon13 dans le forum C
    Réponses: 7
    Dernier message: 21/10/2005, 18h47
  2. Que se passe t il lors de la pose d'un composant?
    Par korntex5 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 06/10/2005, 13h30
  3. que se passe t il quand ...
    Par -<R1>- dans le forum Débuter
    Réponses: 2
    Dernier message: 28/06/2004, 14h00
  4. Que se passe-t-il en interne si un ROLLBACK plante ?
    Par jack554 dans le forum Administration
    Réponses: 4
    Dernier message: 07/04/2004, 12h55
  5. [VB6] [Install] Que se passe-t-il lors du setup?
    Par petit scarabée dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 28/10/2002, 08h26

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