Question

Les Concepts de système d’exploitation de la 6e édition présentent un algorithme trival permettant d’implémenter la section circulaire.

do{
  while (turn != i);
    critical section
  trun = j;
    remainder section
} while(1);

Remarque , Pi est le processus avec l'identifiant i, Pj est le processus avec l'identifiant j.Pour simplifier la question, le livre limite les i, j à 0 et 1, les deux processus constituant l'environnement.

La Question1 consiste à appliquer cet algorithme à résorber l'exigence Progress , qui est l'une des trois exigences de la solution de section circulaire.

À mon avis, lorsque Pi se trouve dans la section restante, elle ne peut pas participer à la décision quant à savoir si Pj peut ou non entrer dans la section critique. Il est ensuite lié à l'exigence.

Ou bien ma compréhension des exigences de progrès est totalement fausse.Alors parce que si Pi se retirait de la section restante, il ne pourrait pas entrer immédiatement dans la section cirtique, cela enfreindrait la règle.

Question2 ,

  

Si turn == 0 et que P1 est prêt à entrer   sa section critique, P1 ne peut pas faire   donc, même si P0 peut être dans son   section restante

Pour autant que je sache, je ne pouvais pas comprendre pourquoi turn == 0 et que p0 soit dans la section restante pourrait exister simultanément ...

Donc, cette déclaration est fausse?

Était-ce utile?

La solution

Supposons que turn = 0 initialement. P0 fait sa section critique et définit turn = 1 . Maintenant, P1 doit exécuter sa section critique avant que P0 puisse l'exécuter à nouveau. Mais le fait que les deux discussions aient une section critique ne signifie pas qu’ils vont vouloir en alterner l’utilisation de cette façon: en fait, P1 risque de ne jamais prendre son tour. (Et dans le cas général, vous ne pouvez pas déterminer cela au moment de la compilation .)

En gros, le problème est que les threads sont obligés d'alterner leurs tours , même si l'un d'entre eux ne veut pas entrer dans sa section critique pendant un temps indéfiniment.

Au fait, votre réponse à la question 1 est correcte. L'algorithme n'échoue pas avec la condition Progression , il échoue avec la condition En attente .

.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top