Помощь с заданием на Akka

5 000 руб. за проект
18 апреля 2021, 04:37 • 1 отклик • 52 просмотра
Нужно написать небольшой скрипт на C# или Java или Scala и Akka. Несколько актеров которые запрашивают поочередно доступ к ресурсу.

Для этого задания вы реализуете часы Лампорта и используете их в варианте алгоритма взаимного исключения, который Лампорт дает в «Time, Clocks, and the Ordering of Events in a Distributed System».
Выполнение
Вам следует написать реализацию часов Лампорта с разумным интерфейсом и использовать ее для реализации версии алгоритма взаимного исключения Лампорта (стр. 4), которая работает для любого количества процессов.
Под «разумным интерфейсом» я подразумеваю, что ваша реализация часов не должна быть просто необработанными целыми числами: такая реализация была бы функционально правильной, но скрывала бы различие между счетчиками и часами Лампорта. Используйте класс или интерфейс, предоставляющий соответствующие операции.
Когда я говорю, что он должен работать для любого количества процессов, основная программа должна принимать несколько процессов как текстовый аргумент командной строки. Например, я должен иметь возможность выбрать 2, 5 или 2500 процессов, передав соответствующие флаги командной строки. Например,
В .NET Core я должен иметь возможность вызывать это как dotnet run 2 или dotnet run 25000

Каждый раз, когда процесс запрашивает ресурс, он должен регистрировать, что запрашивает ресурс.
Каждый раз, когда процесс получает ресурс, он должен распечатать, что он получил ресурс.
Каждый раз, когда процесс освобождает ресурс, он должен регистрировать выпуск (перед фактической отправкой сообщений о выпуске)

Пожалуйста, включите текст «ACQUIRING», «OWNED» и «RELEASING» в соответствующие сообщения.
Для сообщений используйте private ILoggingAdapter log = Context.GetLogger(); log.Info();
Вы можете включить дополнительную информацию в логи, если вы регистрируете хотя бы эти события, а сообщения журнала для этих событий содержат соответствующие слова.
Обратите внимание, что алгоритм Лампорта требует, чтобы процесс только один раз запросил ресурс, а затем дождался своей очереди; процесс не должен запрашивать ресурс повторно до тех пор, пока он не будет получен и освобожден.
Обратите внимание, что вы будете использовать Akka только на одной машине, поэтому в этом случае предположения Лампорта об отсутствии независимого сбоя и правильном порядке сообщений действительно верны.
Вы можете предположить, что все процессы начинаются со знанием всех остальных процессов. Простым способом сделать это было бы, чтобы каждый субъект начинал только в ожидании списка (например, массива) ссылок на актеры, и после получения этого списка использовал Context.Become для запуска основного алгоритма.

Расширьте протокол и систему, чтобы, если пользователь нажимает Enter на консоли, система завершает работу без ошибок: сообщение о завершении работы должно поступать в каждый процесс, а процесс должен прекратить запрашивать ресурс после получения уведомления о завершении работы. Если процесс получает уведомление о завершении работы, удерживая блокировку, он должен снять ее перед завершением. Вы можете отправлять дополнительные сообщения, чтобы гарантировать завершение всех процессов.


Файлы