Moniteur et thread actif
2 participants
Page 1 sur 1
Moniteur et thread actif
Bonjour ,
par un seul moniteur actif à la fois dans un moniteur vous voulez dire un seul actif sur une file d'attente define par une condition donée ou pour tout les conditions on aura un seul actif à la fois?
si je ne me trompe pas j'ai compris qu'un moniteur peut avoir plusieurs conditions et chaque condition presente un file d'attente dont on peut avoir un thread actif non?
par un seul moniteur actif à la fois dans un moniteur vous voulez dire un seul actif sur une file d'attente define par une condition donée ou pour tout les conditions on aura un seul actif à la fois?
si je ne me trompe pas j'ai compris qu'un moniteur peut avoir plusieurs conditions et chaque condition presente un file d'attente dont on peut avoir un thread actif non?
user07- Posts : 20
Join date : 27/09/2017
Re: Moniteur et thread actif
Par "un seul actif à la fois", je veux dire que vous pouvez avoir plusieurs threads qui sont "dans" le code du moniteur mais que pour N threads "dans le code" seule une seule peut être active, les autres étant toutes suspendues sur une condition par exemple.
Est-ce plus clair?
Est-ce plus clair?
Re: Moniteur et thread actif
oui donc si on deux conditions on peut avoir deux threads actifs à la fois?
user07- Posts : 20
Join date : 27/09/2017
Re: Moniteur et thread actif
Absolument pas. C'est une thread active par moniteur... donc toujours une et une seule quelque soit le nombre de conditions. Si on a plusieurs conditions, c'est que l'on a plusieurs raisons de se bloquer.
Re: Moniteur et thread actif
mais ce que j'ai compris que c'est deux threads n'ont pas la meme condition (pas la meme raison de blocage) ils peuvent s'excuter les deux a la fois non?
user07- Posts : 20
Join date : 27/09/2017
Re: Moniteur et thread actif
Si cela arrive, les variables protégées par le moniteur ne sont plus protégées car rien n'empêche l'une des threads de modifier une variable dans le dos de l'autre. Donc c'est absolument à éviter.
La condition, c'est la raison du blocage, cela permet de ne pas mettre toutes les threads bloquées dans la même file et de les reprendre à mauvais escient. Regardez l'exemple. Regardez bien l'exemple du sas où chaque condition correspond à une porte. Il ne faut réveiller les threads de l'entrée que lorsque celles qui étaient bloquées en sortie seront toutes réveillées. Et si on a deux threads actives au même moment, on a des risques sur les compteurs partagés.
La condition, c'est la raison du blocage, cela permet de ne pas mettre toutes les threads bloquées dans la même file et de les reprendre à mauvais escient. Regardez l'exemple. Regardez bien l'exemple du sas où chaque condition correspond à une porte. Il ne faut réveiller les threads de l'entrée que lorsque celles qui étaient bloquées en sortie seront toutes réveillées. Et si on a deux threads actives au même moment, on a des risques sur les compteurs partagés.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|