В этом задании вам необходимо реализовать параллельную версию алгоритма Дейкстры с использованием Multi-Queue в качестве приоритетной очереди.
Решение, в котором поддерживается счетчик суммарного количества вершин в очереди и в процессе обработки (как рассказано на лекции) считается корректным. Для тех, кто хочет получить больше пользы от выполнения задания, предлагается поддерживать счетчики количества пустых очередей и ждущих потоков. Ожидание должно быть активным (проверка необходимого условия в цикле), никакие wait
, park
и прочие примитивы использовать не нужно.
Проект содержит следующие файлы:
Graph.kt
содержит классыNode
иEdge
, которые вы будете использовать в алгоритме. Для обновления расстояния до вершины необходимо использоватьdistanceMutable.compareAndSet(..)
.Dijkstra.kt
содержит шаблон для параллельной версии алгоритма, его вам и требуется дописать.
Разрешается изменять только файл Dijkstra.kt
. Для обновления расстояния до вершины необходимо использовать CAS.