Strategieën om deadLock te vermijden - 1

"Hallo Amigo!"

"Ik wil je vertellen over een paar strategieën om impasses te vermijden."

"De beste strategie is een doordachte architectuur en een reeks regels die bepalen wanneer en in welke volgorde u sloten kunt gebruiken (mutexen verwerven). De klassieke benadering van het probleem is het ontwikkelen van een slotenhiërarchie en de regel vast te stellen dat bepaalde sloten nooit kunnen worden gesloten. verkregen in een staat waarin bepaalde andere sloten al zijn verworven."

"Soms zijn bijvoorbeeld sloten niveaus toegewezen en is een thread vereist om sloten te verkrijgen van hogere niveaus naar lagere niveaus (maar sloten verwerven in de andere richting is niet toegestaan). Bovendien is het verkrijgen van meerdere sloten met hetzelfde niveau niet toegestaan."

"In het vorige voorbeeld met ridders zouden we bijvoorbeeld een uniek nummer (id) aan elke ridder kunnen toevoegen en vereisen dat sloten worden verkregen van de grotere id naar de kleinere id."

Voorbeeld
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;
   }
  }
 }
}

"Dat is een mooie oplossing."

"Het is een heel eenvoudige oplossing, maar ik vind het leuk. Ik hoop dat het nuttig voor je zal zijn als je nadenkt over het oplossen van mogelijke deadlock-problemen."

"Bedankt, Elly."