Actaeonis
Artikelen: 0
Berichten: 28
Lid geworden op: do 28 feb 2013, 16:59

Het algoritme van Dekker.

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.
 
Gebruikersavatar
Math-E-Mad-X
Artikelen: 0
Berichten: 2.907
Lid geworden op: wo 13 sep 2006, 17:31

Re: Het algoritme van Dekker.

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?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }
Actaeonis
Artikelen: 0
Berichten: 28
Lid geworden op: do 28 feb 2013, 16:59

Re: Het algoritme van Dekker.

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.

Terug naar “Informatica en programmeren”