Sluisontwerp
Krijg het idee van de slotimplementatie: 1. Begin met het aanmaken van een map als een lock (znode), die meestal wordt gebruikt om de vergrendelde entiteit te beschrijven, genaamd :/lock_node 2. De client die de lock wil verkrijgen, maakt een znode aan in de lockdirectory als kindknoop van de lock/lock_node, en het knooptype is Ordered Temporary Node (EPHEMERAL_SEQUENTIAL); Bijvoorbeeld, twee clients maken znodes, /lock_node/lock-1 en /lock_node/lock-2 3. De huidige client roept getChildren(/lock_node) aan om alle kindknooppunten van de lockdirectory te krijgen, zonder watch in te stellen, en vervolgens de broederknopen te verkrijgen die kleiner zijn dan zichzelf (aangemaakt in stap 2). 4. De knoop die kleiner is dan zichzelf in stap 3 bestaat niet & de kleinste knoop is dezelfde als die in stap 2, wat aangeeft dat het huidige clientsequentienummer het kleinst is, haal de vergrendeling en beëindig. 5. De client monitort de toestand van de ordelijke tijdelijke knoop die de op één na kleinste is naast zichzelf 6. Als de status van de gemonitorde subnode verandert, spring dan naar stap 3 en ga door met de follow-up operaties totdat de lock race is verlaten.
De auteur zal hier de distributievergrendeling niet introduceren, laten we het stroomdiagram van het volledige codeontwerp als volgt bekijken
|