2010-06-16 26 views
1
proces P0:        proces P1: 
while (true)       while (true) 
{          { 
    flag[0] = true;       flag[1] = true; 
    while (flag[1])       while (flag[0]) 
    {          { 
    flag[0] = false;      flag[1] = false; 
    flag[0] = true;       flag[1] = true; 
    }          } 
crit0();         crit1(); 
flag[0] = false;       flag[1] = false; 
rem0();         rem1(); 
}          } 

Est-ce que quelqu'un pourrait me donner un scénario avec des changements de contexte pour prouver si le code mentionné ci-dessus répond aux exigences de progression et d'attente bornée.Problème de section critique

Et quelqu'un peut me donner quelques conseils sur la façon de détecter si un code répond aux exigences du progrès ou borné d'attente (et peut-être, y compris la famine, l'impasse et après-vous après que vous)

+1

* tousse * devoirs * tousse * –

+0

Oui, c'était un devoir et j'ai le awnser déjà, mais je ne suis pas, demain, nous avons un test et j'ai besoin de savoir ceci .. – ambiance

+0

Je suis confus par votre syntaxe. Les fonctions crit0 et crit1 entrent-elles dans la même section critique? Si différentes sections critiques, il n'y a pas d'attente du tout. – bshields

Répondre

2

Les deux processus se déroulent à le même temps.

L'astuce ici est que, puisqu'il n'y a rien vraiment synchroniser les deux programmes, quelque chose pourrait arriver entre lignes. Sur la même note, il est possible que les choses arrivent en même temps.

Pour voir comment cela peut être un problème, pensez à cette situation ...

Qu'arriverait-il si le premier drapeau [0] = true et le premier drapeau [1] = true est arrivé sur P0/P1 exactement au même moment?

Tant le processus 1 que le processus 2 seraient bloqués dans une boucle while. Comment sortiraient-ils de la boucle while? Un processus devrait vérifier while (flag [other]) exactement au même moment où l'autre processus met son flag [me] à true. C'est une période très étroite. C'est l'équivalent de lancer des dés à plusieurs reprises et de ne pas continuer jusqu'à ce que vous atteigniez un certain nombre.

C'est pourquoi nous avons besoin de quelque chose d'un niveau supérieur pour gérer la synchronisation pour nous - de vrais verrous et autres.

edit: Oh, une autre chose. Vous pouvez vérifier si les opérations de lecture/écriture sont sécurisées par les threads. Que se passe-t-il si le système essaie d'écrire sur le bit en même temps qu'il essaie de le lire?

Edit2: Pour votre information - http://msdn.microsoft.com/en-us/library/aa645755(v=VS.71).aspx