Konstrukce zámku
Získejte nápad na implementaci zámku: 1. Začněte vytvořením adresáře jako zámku (znode), který se obvykle používá k popisu uzamčené entity, nazývané :/lock_node 2. Klient, který chce zámek získat, vytvoří znode v adresáři zámku jako poduzelný uzel zámku/lock_node a typ uzlu je Ordered Temporary Node (EPHEMERAL_SEQUENTIAL); Například dva klienti vytvářejí znody, /lock_node/lock-1 a /lock_node/lock-2 3. Aktuální klient volá getChildren(/lock_node), aby získal všechny poduzly adresáře zámku, aniž by nastavoval watch, a poté získal bratrské uzly, které jsou menší než on sám (vytvořeno v kroku 2). 4. Uzel, který je menší než on sám v kroku 3, neexistuje a nejmenší uzel je stejný jako ten vytvořený v kroku 2, což znamená, že aktuální pořadové číslo klienta je nejmenší, získejte zámek a konec. 5. Klient sleduje stav uspořádaného dočasného uzlu, který je nejmenší po něm 6. Pokud se stav monitorovaného poduzlu změní, přejděte na krok 3 a pokračujte v následných operacích, dokud není ukončena závod za zámykem.
Autor zde nebude představovat distribuční zámek, podívejme se na tok celého návrhu kódu takto
|