Конструкція замків
Ознайомтеся з ідеєю реалізації замків: 1. Почніть зі створення каталогу у вигляді блокування (znode), який зазвичай використовується для опису заблокованої сутності, що називається :/lock_node 2. Клієнт, який хоче отримати блокування, створює znode у каталозі блокування як дочірній вузол lock/lock_node, а тип вузла — Ordered Temporary Node (EPHEMERAL_SEQUENTIAL); Наприклад, два клієнти створюють znode — /lock_node/lock-1 і /lock_node/lock-2 3. Поточний клієнт викликає getChildren(/lock_node), щоб отримати всі дочірні вузли з каталогу блокування, без встановлення watch, а потім отримати братські вузли, менші за нього (створені на кроці 2). 4. Вузол, який менший за нього на кроці 3, не існує , і найменший вузол збігається з тим, що створений на кроці 2, що означає, що поточний номер послідовності клієнта найменший, отримайте блокування і кінець. 5. Клієнт контролює стан впорядкованого тимчасового вузла, який є наступним за меншістю після нього 6. Якщо змінюється статус контрольованого підвузла, перейдіть до кроку 3 і продовжуйте наступні операції до завершення гонки блокування.
Автор не буде вводити блокування розподілу тут, давайте розглянемо блок-схему всього дизайну коду наступним чином
|