Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Section critique re-entrante a l'intérieur d'un même thread ?

3 réponses
Avatar
Silver bullet
Je voudrais savoir si une section critique est ré-entrante à l'intérieur
d'un même thread.

Lorsqu'on vient de rentrer dans une section critique, si il y a un appel à
une fonction qui démarre elle aussi par une entrée dans la même section
critique (et même thread), est-ce qu'il y aura un blocage à l'entrée de la
2eme fonction ou pas ?
Je présume que non puisque c'est le même thread, mais j'ai quand même un
doute. Merci de votre aide.

3 réponses

Avatar
Vincent Burel
"Silver bullet" wrote in message
news:4541c8c2$0$5084$
Je voudrais savoir si une section critique est ré-entrante à l'intérieur
d'un même thread.

Lorsqu'on vient de rentrer dans une section critique, si il y a un appel à
une fonction qui démarre elle aussi par une entrée dans la même section
critique (et même thread), est-ce qu'il y aura un blocage à l'entrée de la
2eme fonction ou pas ?
Je présume que non puisque c'est le même thread, mais j'ai quand même un
doute. Merci de votre aide.



Je ne suis pas certain de la réponse... je dirais que ca devrait
fonctionner...
Mais je ne conseillerais pas de le faire... Une section critique se doit
d'etre la plus courte possible, c'est pourquoi généralement une section
critique ne contient que des mouvements mémoires (ex : copie de
paramètres)... on évite les appels de fonctions, surtout si ce sont des
fonctions comportant des sections critiques. Il faut éviter tout
potentialité de dead lock... et appeler des fonctions à l'intérieur d'une
section critique en est une.

VB
Avatar
Arnaud Debaene
"Vincent Burel" a écrit dans le message de
news: 4541dfc5$0$5100$

"Silver bullet" wrote in message
news:4541c8c2$0$5084$
Je voudrais savoir si une section critique est ré-entrante à l'intérieur
d'un même thread.

Lorsqu'on vient de rentrer dans une section critique, si il y a un appel
à
une fonction qui démarre elle aussi par une entrée dans la même section
critique (et même thread), est-ce qu'il y aura un blocage à l'entrée de
la
2eme fonction ou pas ?





Oui ca fonctionne, les sections critiques sont réentrantes (tout comme les
mutexs).

Comme d'habitude, un petit tour dans la doc nous donne toutes les
informations :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/entercriticalsection.asp

"After a thread has ownership of a critical section, it can make additional
calls to EnterCriticalSection or TryEnterCriticalSection without blocking
its execution. This prevents a thread from deadlocking itself while waiting
for a critical section that it already owns. The thread enters the critical
section each time EnterCriticalSection and TryEnterCriticalSection succeed.
A thread must call LeaveCriticalSection once for each time that it entered
the critical section."

Je ne suis pas certain de la réponse... je dirais que ca devrait
fonctionner...
Mais je ne conseillerais pas de le faire... Une section critique se doit
d'etre la plus courte possible, c'est pourquoi généralement une section
critique ne contient que des mouvements mémoires (ex : copie de
paramètres)... on évite les appels de fonctions, surtout si ce sont des
fonctions comportant des sections critiques. Il faut éviter tout
potentialité de dead lock...



Si tu t'appelles toi même en récursif (le cas typique pour lequel on
acquiert une section critique plusieurs fois de suite) , tu ne risques pas
le deadlock....

Arnaud
MVP - VC
Avatar
Vincent Burel
"Arnaud Debaene" wrote in message
news:45425323$0$3691$

"Vincent Burel" a écrit dans le message


de
news: 4541dfc5$0$5100$
>
> "Silver bullet" wrote in message
> news:4541c8c2$0$5084$
>> Je voudrais savoir si une section critique est ré-entrante à


l'intérieur
>> d'un même thread.
>>
>> Lorsqu'on vient de rentrer dans une section critique, si il y a un


appel
>> à
>> une fonction qui démarre elle aussi par une entrée dans la même section
>> critique (et même thread), est-ce qu'il y aura un blocage à l'entrée de
>> la
>> 2eme fonction ou pas ?

Oui ca fonctionne, les sections critiques sont réentrantes (tout comme les
mutexs).

Comme d'habitude, un petit tour dans la doc nous donne toutes les
informations :



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/entercriticalsection.asp

"After a thread has ownership of a critical section, it can make


additional
calls to EnterCriticalSection or TryEnterCriticalSection without blocking
its execution. This prevents a thread from deadlocking itself while


waiting
for a critical section that it already owns. The thread enters the


critical
section each time EnterCriticalSection and TryEnterCriticalSection


succeed.
A thread must call LeaveCriticalSection once for each time that it entered
the critical section."

> Je ne suis pas certain de la réponse... je dirais que ca devrait
> fonctionner...
> Mais je ne conseillerais pas de le faire... Une section critique se doit
> d'etre la plus courte possible, c'est pourquoi généralement une section
> critique ne contient que des mouvements mémoires (ex : copie de
> paramètres)... on évite les appels de fonctions, surtout si ce sont des
> fonctions comportant des sections critiques. Il faut éviter tout
> potentialité de dead lock...

Si tu t'appelles toi même en récursif (le cas typique pour lequel on
acquiert une section critique plusieurs fois de suite) , tu ne risques pas
le deadlock....



oui, peut etre... pour ma part je préfère éviter... les sections critiques
peuvent etres rendues exclusives au fil de l'élaboration d'un programme et
donc plus "ré-entrante", (peut etre que le terme "inclusive" serait plus
judicieux que "ré-entrante"), et quand on commence à multiplier les
thread... ca peut poser des problèmes d'appeler des fonctions à section
critique, à l'intérieur d'une section critique...

VB