Programmation Concurrente (2016)

Question sur la synchronisation

Voir le sujet précédent Voir le sujet suivant Aller en bas

Question sur la synchronisation

Message par ren12 le Mar Oct 11, 2016 4:32 pm

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

ren12

Posts : 7
Join date : 11/10/2016

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par Admin le Jeu Oct 13, 2016 8:00 pm

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?

Admin
Admin

Posts : 31
Join date : 24/08/2016

Voir le profil de l'utilisateur http://3i001-2016.forumactif.org

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par ren12 le Jeu Oct 13, 2016 8:07 pm

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

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par Admin le Jeu Oct 13, 2016 8:54 pm

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? ;-)

Admin
Admin

Posts : 31
Join date : 24/08/2016

Voir le profil de l'utilisateur http://3i001-2016.forumactif.org

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par ren12 le Jeu Oct 13, 2016 9:09 pm

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

ren12

Posts : 7
Join date : 11/10/2016

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par Admin le Jeu Oct 13, 2016 9:30 pm

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.

Admin
Admin

Posts : 31
Join date : 24/08/2016

Voir le profil de l'utilisateur http://3i001-2016.forumactif.org

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par ren12 le Jeu Oct 13, 2016 9:47 pm

Je vois Smile. Merci pour votre réponse Wink

ren12

Posts : 7
Join date : 11/10/2016

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par nsznajder le Ven Oct 28, 2016 11:39 am

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!

nsznajder

Posts : 2
Join date : 30/08/2016

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Question sur la synchronisation

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum