Конструкция замков
Получите идею реализации замка: 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 и продолжайте операции последующей проверки до выхода из гонки блокировки.
Автор не будет вводить здесь блокировку распределения, давайте рассмотрим блок-схему всего дизайна кода следующим образом
|