Необходимо доработать реализую MSQueue так, чтобы она стала безопасной для использования из множества потоков одновременно.
Используйте алгоритм очереди, предложенный M. Michael и L. Scott.
Ссылка на статью: http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf
В отличие от рассказанного на лекции алгоритма, вам следует соблюдать предложенный в исходной работе инвариант
"голова не может быть правее хвоста", для поддержания которого операция dequeue должна помогать передвигать хвост.
Ко всему прочему, ваш алгоритм должен быть максимально простым и не содержать предлагаемые в исходной статье оптимизации.
Для тестирования используйте команду mvn test, следующие тесты будут запущены:
FunctionalTest.javaпроверяет базовую корректность множества.LinearizabilityTest.javaпроверяет реализацию множества на корректность в многопоточной среде.
Обратите внимание, что тесты не покрывают все возможные ошибки синхронизации, поэтому прохождение тестов не означает корректность решения.
- Все атомарные операции должны выполняться при помощи примитивов из библиотеки
kotlinx.atomicfu. - Использования любых примитивов из пакета
java.util.concurrent.*,synchronizedметодов и блоков запрещены. - Разрешается редактирование только файла
MSQueue.java.