Strategier for å unngå deadLock - 1

"Hei, Amigo!"

"Jeg vil fortelle deg om et par strategier for å unngå vranglås."

"Den beste strategien er en gjennomtenkt arkitektur og et sett med regler som styrer når og i hvilken rekkefølge du kan bruke låser (anskaffe mutexes). Den klassiske tilnærmingen til problemet er å utvikle et låshierarki og etablere regelen om at visse låser aldri kan være anskaffet i en stat der visse andre låser allerede er anskaffet."

"Noen ganger blir for eksempel låser tildelt nivåer, og det kreves en tråd for å skaffe låser i rekkefølge fra høyere nivåer til lavere nivåer (men å skaffe låser i den andre retningen er ikke tillatt). I tillegg er det ikke tillatt å anskaffe flere låser med samme nivå tillatt."

"For eksempel, i det forrige eksemplet med riddere, kunne vi legge til et unikt nummer (id) til hver ridder og kreve at låser anskaffes fra den større IDen til den mindre IDen."

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 vakker løsning."

"Det er en veldig enkel løsning, men jeg liker den. Jeg håper den vil være nyttig for deg når du tenker på hvordan du kan løse potensielle problemer med vranglås."

"Takk, Ellie."