Stratégiák a holtpont elkerülésére – 1

– Szia Amigo!

"Szeretnék mesélni néhány stratégiáról a holtpontok elkerülésére."

"A legjobb stratégia egy átgondolt architektúra és egy olyan szabályrendszer, amely szabályozza, hogy mikor és milyen sorrendben használhat zárakat (mutexet szerezhet be). A probléma klasszikus megközelítése egy zárhierarchia kialakítása, és annak a szabálynak a felállítása, hogy bizonyos zárakat soha nem lehet használni. olyan állapotban szerezték be, ahol bizonyos más zárakat már beszereztek."

"Például néha a zárokhoz szintek vannak hozzárendelve, és egy szálra van szükség ahhoz, hogy a zárakat magasabb szintről alacsonyabb szintre gyűjtsék (de a másik irányú zárak beszerzése nem megengedett). Ezenkívül több zár megszerzése azonos szinten nem megengedett."

"Például az előző példában a lovagokkal minden lovaghoz hozzáadhattunk egy egyedi számot (id), és megkövetelhetnénk, hogy a zárakat a nagyobb azonosítótól a kisebb azonosítóig szerezzük be."

Példa
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;
   }
  }
 }
}

– Ez szép megoldás.

"Ez egy nagyon egyszerű megoldás, de tetszik. Remélem, hasznos lesz az Ön számára, amikor azon gondolkodik, hogyan oldja meg a lehetséges holtponti problémákat."

– Köszönöm, Ellie.