Programmation Concurrente (2016)

Moniteurs et incompréhension

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

Moniteurs et incompréhension

Message par VanHala le Dim Oct 15, 2017 3:47 pm

Bonjour,

Personnellement, j'ai rien comprit à cette semaine 4. Autant les cours que le TP ou je n'ai quasiment rien fait.
Jusqu'à maintenant c'était clair et plutôt simple, on avait juste a synchroniser une méthode si on voulait qu'un seul thread a la fois puisse y accéder, mais maintenant c'est vraiment très flou pour moi.

Concrètement, c'est quoi un moniteur ? Je trouve ça vraiment abstrait, sur certaines vidéos vous utilisez des objet de type Object comme "mutex" je n'ai pas compris non plus pourquoi, parfois, on utilise synchronized sur this, parfois sur des objets quelconques.
Je n'ai pas du tout comprit comment ont utilise les moniteurs de la bonne manière et pourquoi on peut dire "cette fois j'utilise le moniteur de l'objet x, cette fois y" en fonction de la situation.

J'ai du mal aussi à savoir quelle variable je dois protéger, dans quelles classes je dois les mettre.. j'ai tout essayé, les vidéos (plusieurs fois chacune), Google, demander à mon chargé de td, je comprends pas.

Par exemple le problème du barbier, c'est vraiment contre intuitif, pourquoi je devrais mettre une variable d'état du coiffeur dans la classe du client ? Normalement, j'ai un salon, et 2 classe qui interagissent a travers ce salon, puis le barbier doit coiffer le premier arrivé de la liste d'attente, comment il peut savoir quel est le thread arrivé en dernier vu que notify ou notifyAll n'as aucune notion d'ordre ? enfin bref vous l'aurez comprit, je suis un peu perdu, et pourtant, j'essaye vraiment.

VanHala

Posts : 2
Join date : 26/09/2017

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Moniteurs et incompréhension

Message par Admin le Dim Oct 15, 2017 8:09 pm

Bonjour,

Pas mal de questions "en vrac" que vous pouvez aussi poser en TD/TME. J'extrais celles que je comprends car votre post est quand même un peu confus ;-).

Q1: << sur certaines vidéos vous utilisez des objet de type Object comme "mutex">>
En Java, tout object est associé à un moniteur (va sa référence = son "this"). Donc vous pouvez faire un synchronized sur cette référence et vous bloquer. On peut ainsi utiliser de manière particulière les objets pour se bloquer... et assurer un accès en exclusion mutuelle à une ressource. D'où le terme "mutex" (mutual exclusion).

Q2: << je n'ai pas compris non plus pourquoi, parfois, on utilise synchronized sur this, parfois sur des objets quelconques >>
Faire un synchronized sur "this" dans une classe, c'est comme faire un synchronized sur une méthodes mais avec une portée limitée. Cela permet de faire une protection (un mutex) sur des variables associées à l'objet. Dans un synchronized sur une méthode, toute la méthode est en exclusion mutuelle, mais si vous faites un synchronized sur "this", vous pouvez le faire sur quelques instructions seulement de la méthode.

Si par contre vous avez plusieurs sections critiques portant sur des conditions différentes, vous pouvez utiliser différents objets pour cela. L'intérêt n'est pas l'objet mais la possibilité de l'utiliser comme mécanisme de synchronisation. Vous pouvez donc avoir un moyen plus fin pour gérer les synchronisations.

Est-ce plus clair sur ces points?

Admin
Admin

Posts : 40
Join date : 24/08/2016

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

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