Question sur la synchronisation
3 participants
Page 1 sur 1
Question sur la synchronisation
Bonjour,
Lorsqu'un thread 1 essai d'accéder à une portion de code protégé par un synchronized ou un lock, et qu'un autre thread 2 est dans ce bloc. Lorsque le thread 1 se bloque, à l'entrée de la section critique, est-il endormi dans l'object synchronisé, et donc ne pourra reprendre qu'après un notify() ou notifyAll(), ou bien pourra reprendre l'exécution à la sortie du bloc par le thread 2 ou le unlock sans être réveillé explicitement ? Si je formule autrement, un thread peut-il se retrouver dans la file d'attente d'un object synchronisé sans l'execition du wait() ?
Merci.
Cordialement
Lorsqu'un thread 1 essai d'accéder à une portion de code protégé par un synchronized ou un lock, et qu'un autre thread 2 est dans ce bloc. Lorsque le thread 1 se bloque, à l'entrée de la section critique, est-il endormi dans l'object synchronisé, et donc ne pourra reprendre qu'après un notify() ou notifyAll(), ou bien pourra reprendre l'exécution à la sortie du bloc par le thread 2 ou le unlock sans être réveillé explicitement ? Si je formule autrement, un thread peut-il se retrouver dans la file d'attente d'un object synchronisé sans l'execition du wait() ?
Merci.
Cordialement
ren12- Posts : 7
Join date : 11/10/2016
Re: Question sur la synchronisation
Votre question n'est pas claire. Seul un UNIQUE fil d'exécution peut être actif dans un bloc synhronized. Un thread bloqué sur wait() n'est pas actif.
Cela répond-il à votre question?
Cela répond-il à votre question?
Re: Question sur la synchronisation
Ce que je veux dire, c'est par exemple le thread 1 exécute un bloc synchronized et commute au milieu du bloc d'instruction. Un thread 2 prend le processeur et essai d'exécuter ce même bloc synchronized, qu'advient-il de ce thread 2 vu que le thread 1 n'a pas encore terminé le bloc et n'a pas laché le verroux ? Est-il mis dans la file d'attente de l'objet synchronisé ?
ren12- Posts : 7
Join date : 11/10/2016
Re: Question sur la synchronisation
J'ai dit «Un seul processus actif dans un synchronized» Donc soit le thread 1 est sur un wait (et il n'est pas actif) soit il est en dehors d'un wait, même commuté et il est actif. Ici, "actif" ne veut pas dire "j'ai le processeur".
Est-ce plus clair? ;-)
Est-ce plus clair? ;-)
Re: Question sur la synchronisation
Oui, j'ai compris cela, mais mais ma question porte sur le thread 2 dans le cas que je viens d'évoquer. Comme vous le dites, le Thread 1, même s'il commute au milieu du bloc synchronized, il est actif. C'est le seul actif dans le synchronized, le Thread 2 ne peut donc pas entrer dans le synchronized. Donc que se passe t-il pour le Thread 2 qui tente d'entrer dans un bloc synchronized déjà occupé par l'activité du Thread 1 ?
Merci
Merci
ren12- Posts : 7
Join date : 11/10/2016
Re: Question sur la synchronisation
haaaaa.... cela signifie que the thread 1 imbrique des synchronized dan sun sens et le thread 2 dans le sens inverse... Vous cherchez les coups :-D.
Dans ce cas, je ne vois qu'une solution: l'interblocage.
Dans ce cas, je ne vois qu'une solution: l'interblocage.
Re: Question sur la synchronisation
Je vois . Merci pour votre réponse
ren12- Posts : 7
Join date : 11/10/2016
Re: Question sur la synchronisation
Bonjour,
j'avais compris la question de façon beaucoup plus simple...
Je tente une réponse qui me semble correspondre à la question simple initiale : si un Thread 2 veut acquérir le lock alors qu'il n'est pas disponible (parce que le Thread 1 est en train d'exécuter le bloc protégé), alors le Thread 2 est mis en attente jusqu'à ce que le lock soit disponible. Il n'y a pas besoin de le réveiller explicitement. Lorsque Thread 1 sera sorti (ou aura libéré le lock), Thread 2 pourra acquérir le lock qu'il attendait.
Je ne sais pas si cela répond à la question de ren12 mais c'est comme cela que je l'avais comprise!
j'avais compris la question de façon beaucoup plus simple...
Je tente une réponse qui me semble correspondre à la question simple initiale : si un Thread 2 veut acquérir le lock alors qu'il n'est pas disponible (parce que le Thread 1 est en train d'exécuter le bloc protégé), alors le Thread 2 est mis en attente jusqu'à ce que le lock soit disponible. Il n'y a pas besoin de le réveiller explicitement. Lorsque Thread 1 sera sorti (ou aura libéré le lock), Thread 2 pourra acquérir le lock qu'il attendait.
Je ne sais pas si cela répond à la question de ren12 mais c'est comme cela que je l'avais comprise!
nsznajder- Posts : 2
Join date : 30/08/2016
Sujets similaires
» Question sur le TP5
» Question sur wait()
» Question de programmation
» Question sur le partiel
» TME Exercice 6 Question 4
» Question sur wait()
» Question de programmation
» Question sur le partiel
» TME Exercice 6 Question 4
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|