Немного отошел от задачи, считаю, что надежней сделать работу лифтов максимально независимыми, без выделенного управленца.
Принцип функционирования лифта заключается в выполнении поставленных задач которые можно задавать как из кабинки, так и с этажа. На этаже можно нажать кнопку ВВЕРХ, кнопку ВНИЗ. Лифт едет и собирает по-пути пассажиров: если лифт едет вверх и на этаже нажата кнопка ВВЕРХ останавливается, ежели лифт едет вверх, а на этаже нажата кнопка ВНИЗ едет дальше, а остановится на обратном пути. Это реализуется двумя списками задач, для одного направления и для обратного, когда задачи из одного направления заканчиваются лифт переходит к выполнению задач обратного направления и т.д.
Работа двух лифтов аналогична, НО у лифта есть список индивидуальных задач (те которые были заданы из лифта), и общих задач (которые были заданы с этажа). Задачи выполняются последовательно от этажа к этажу, тот лифт который быстрей выполнит общую задачу исключает ее из списка задач обоих лифтов, таким образом Лифты работают асинхронно и у каждого свой алгоритм управления.
Примечание: чтоб лифты не стартовали к одному этажу (не приступали к выполнению одной задачи), кто первый приступает к выполнению задачи ставит метку «выполняемая», после обслуживания удаляет из списка задач. Если лифт сделавший пометку «выполняемая» ломается он снимает метку.
Момент старта (когда лифты никого не обслуживают) решается вопрос кому первому обслуживать задачу (кто ближе к этажу назначению, если равноудалёно то в случайном порядке).