1 van 1

Het algoritme van Dekker.

Geplaatst: wo 15 apr 2015, 01:47
door Actaeonis
Ik heb wat problemen bij het interpreteren van het algoritme van Dekker.

 

Code: Selecteer alles

  entrance_intents[0] = true;
   while (entrance_intents[1]) {
      if (turn ≠ 0) {
         entrance_intents[0] = false;
         while (turn ≠ 0) {
           // busy wait
         }
         entrance_intents[0] = true;
      }
   }
 
   // critical section
   ...
   turn    = 1;
   entrance_intents[0] = false;
   // remainder section

Stel nu dat p0 de kritieke sectie binnen wilt en zijn vlagje hoog zet. p1 toont op dit moment nog geen interesse in de kritieke sectie. Waar mijn probleem zit is dat, stel dat tijdens de kritieke sectie p0 crasht, dan blijft de vlag van p0 hoog staan, en zal - naar mijn inzicht - p1 nooit de eerste while voorbij kunnen, en bijgevolg oneindig lang blijven pollen naar de status van het vlagje.
 

Re: Het algoritme van Dekker.

Geplaatst: wo 15 apr 2015, 10:51
door Math-E-Mad-X
stel dat tijdens de kritieke sectie p0 crasht, dan blijft de vlag van p0 hoog staan, en zal - naar mijn inzicht - p1 nooit de eerste while voorbij kunnen, en bijgevolg oneindig lang blijven pollen naar de status van het vlagje.
 
 
Dat lijkt me te kloppen ja. 
 
De conclusie is dus dat Dekker's algoritme niet bestand is tegen dit soort crashes. Had je iets anders verwacht?

Re: Het algoritme van Dekker.

Geplaatst: wo 15 apr 2015, 11:06
door Actaeonis
Ik dacht dat dergelijk verloop misschien kan gezien worden als een vorm van starvation, waar ik dacht dat het algoritme vrij van was. Verder heb ik nog problemen, zo is de binnenste if blijkbaar een essentieel onderdeel van het algoritme. Waarom is dit precies? Zou, het kunnen dat moest deze if niet aanwezig zijn en het vlagje steeds laag gezet wordt het kunnen dat het andere proces het vlagje permanent laag waarneemt ook wanneer het de beurt is aan het ander proces, als het vlagje immers laag staat wordt er niet naar de beurt variabele gekeken.