– 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."
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.
GO TO FULL VERSION