Strategier til at undgå deadLock - 1

"Hej, Amigo!"

"Jeg vil gerne fortælle dig om et par strategier til at undgå dødvande."

"Den bedste strategi er en gennemtænkt arkitektur og et sæt regler, der styrer, hvornår og i hvilken rækkefølge du kan bruge låse (erhverve mutexes). Den klassiske tilgang til problemet er at udvikle et låsehierarki og etablere reglen om, at visse låse aldrig kan være erhvervet i en stat, hvor visse andre låse allerede er erhvervet."

"For eksempel tildeles låse nogle gange niveauer, og der kræves en tråd for at erhverve låse i rækkefølge fra højere niveauer til lavere niveauer (men at erhverve låse i den anden retning er ikke tilladt). Derudover er det ikke tilladt at erhverve flere låse med samme niveau tilladt."

"For eksempel, i det foregående eksempel med riddere, kunne vi tilføje et unikt nummer (id) til hver ridder og kræve, at låse erhverves fra det større id til det mindre id."

Eksempel
class KnightUtil
{
 public static void kill(Knight knight1, Knight knight2)
 {
  Knight knightMax = knight1.id > knight2.id ? knight1: knight2;
  Knight knightMin = knight1.id > knight2.id ? knight2: knight1;

  synchronized(knightMax)
  {
   synchronized(knightMin)
   {
    knight2.live = 0;
    knight1.experience +=100;
   }
  }
 }
}

"Det er en smuk løsning."

"Det er en meget simpel løsning, men jeg kan godt lide den. Jeg håber, den vil være nyttig for dig, når du tænker på, hvordan du løser potentielle dødvandeproblemer."

"Tak, Ellie."