FANDOM



David Hyldkrogs algoritme går ud på at trådene der gerne vil ind i den kritiske zone placeres i en tabel (array). Den første tråd bliver herefter testet i en if statement, og hvis dens flag er sat til "True" får den adgang til den kritiske zone. Når tråden er færdig i den kritiske zone bliver den sat bagerst i tabellen og skubber de andre i tabellen en plads frem. Hvis trådens flag derimod er sat til "False" bliver den sat bagerst i tabellen og skubber de andre i tabellen en plads frem således at den næste tråd i tabellen kan testes om at få adgang til den kritiske zone. Koden til David Hyldkrogs algoritme er skrevet i actionscript 3 og ser således ud:

// Har givet elementerne i tabellen værdierne "True", men denne værdi ændres selvfølgelig alt efter om trådene vil ind i den kritiske zone eller ej.

var elements:Array = [ ];

elements[ 0 ] = [ "True" ];

elements[ 1 ] = [ "True" ];

elements[ 2 ] = [ "True" ];


stage.addEventListener(Event.ENTER_FRAME, hyldkrog);

function hyldkrog(event:Event) {

if( elements [ 0 ] [ 0 ] == "True") {

//elements [ 0 ] befinder sig nu i den kritiske zone

}else{

//elements [ 0 ] vil ikke ind i den kritiske zone

}

// her kopierer vi elements [ 0 ] og sætter bagerst i køen. OBS nu er elements [ 0 ] både forest og bagerst i køen.

//Derfor bruger vi koden "elements.shift();" lidt senere for at slette det første element i array'en.

elements.push(elements [0]);

// Fjerner det første element i en array således at elements [ 0 ] fjernes. elements [ 1 ] bliver derfor til

//elements [ 0 ] og elements [ 2 ] bliver til elements [ 1 ] og kopien som vi smed bagerst af elements [ 0 ] ved hjælp

// af push metoden bliver til element [ 2 ].

elements.shift();

}

//End of code


For at teste ovenstående kode ud således at man kan se de enkelte bevægelser i et output vindue kan nedenstående kode bruges:


//TEST CODE

// Har givet dem værdierne "True" og "A", "True" og "B", "True" og "C" for at man kan se de skifter plads.

//rigtigt skulle "True" pladsen være den eneste plads, og skifter selvfølgelig skifte mellem "True" or "False" alt efter om tråden vil ind i den kritiske zone eller ej.

var elements:Array = [ ];

elements[ 0 ] = [ "True", "A"];

elements[ 1 ] = [ "True", "B"];

elements[ 2 ] = [ "True", "C"];


stage.addEventListener(Event.ENTER_FRAME, hyldkrog);

function hyldkrog(event:Event) {

if( elements [ 0 ] [ 0 ] == "True") {

//A befinder sig i elements [ 0 ]

trace(elements [ 0 ] [ 1 ] + " inde i den kritiske zone.");

}else{

//A befinder sig i elements [ 0 ]

trace(elements [ 0 ] [ 1 ] + " ikke inde i den kritiske zone.");

}

// her kopierer vi elements [ 0 ] og sætter bagerst i køen. OBS nu er elements [ 0 ] både forest og bagerst i køen.

//Derfor bruger vi koden "elements.shift();" lidt senere for at slette det første element i tabellen (array'en).

elements.push(elements [0]);

// Fjerner det første element i tabellen (array'en) således at elements [ 0 ] fjernes. elements [ 1 ] bliver derfor til

//elements [ 0 ] og elements [ 2 ] bliver til elements [ 1 ] og kopien som vi smed bagerst af elements [ 0 ] ved hjælp

// af push metoden bliver til element [ 2 ].

elements.shift();

}

//END OF TEST CODE

David Hyldkrogs algoritme forhindrer problemer med gensidig udelukkelse (mutual exclusion) ved at kun en tråd kan være i den kritiske zone ad gangen. Algoritmen forhindrer også Deadlock ved at trådene skubber hinanden en plads frem i tabellen ligemeget om de har været inde i den kritiske zone eller ej. Starvation (udsultning) kan dog ske såfremt tråden dør inde i den kritiske zone før den aktiverer elements.push() og elements.shift()koden. Udover det kan der også ske Starvation ved at tråden udløser elements.push koden og derefter dør således at den ikke får udløst elements.shift() koden. Dette scenario vil betyde at det er den samme tråd som er først i tabellen hver gang, og derfor er den eneste som afprøves i if statementen indtil den forhåbentlig ikke dør og får udløst elements.shift() koden.


This article uses material from the Wikipedia article wikipedia:en:David Hyldkrogs algoritme, that was deleted or is being discussed for deletion, which is released under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
Author(s): David Hyldkrogs algoritme/edithistory Search for "David Hyldkrogs algoritme" on Google
View Wikipedia's deletion log of "David Hyldkrogs algoritme"
Wikipedia-logo-v2