Skip to content

Latest commit

 

History

History

universal-construction

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Универсальная Конструкция

В рамках данного задания необходимо с помощью универсальной lock-free конструкции реализовать счетчик с атомарной операцией инкремента на основе объекта консенсуса.

Задание

В файле src/AtomicCounter.kt находится описание интерфейса счетчика, который вам предстоит реализовать. Вам недо реализовать всего одну операцию:

fun getAndAdd(x: Int): Int

В вашем распоряжении есть класс Consensus<T>, который реализует консенсус на объекте любого типа T предоставляя единственную операцию:

fun decide(value: T): T

Ваше решение должно быть в файле src/Solution.(kt|java). Основной класс должен называться Solution. Шаблоны решений вы найдете здесь:

В классе решения вы можете использовать объекты типа Consensus для синхронизации потоков, объекты типа ThreadLocal для хранения состояния внутри потока, и значения типа Int. Все поля класса должны быть неизменяемые (val в Kotlin, final в Java). Массивы использовать нельзя. Для lock-free универсальной конструкции они не нужны. Также вам наверняка потребуется вспомогательный класс, на который вы так же можете ссылать и на который накладываются такие же ограничения. Вспомогательные классы должны быть внутри вашего класса решения.

Для проверки вашего решения запустите из корня репозитория:

  • ./gradlew build на Linux или MacOS
  • gradlew build на Windows

Тесты:

  • CorrectnessTest проверяет последовательную спецификацию и выполнение ограничений описанных в условии.
  • LinearizabilityTest проверяет линеаризуемость вашего решения.
  • LockFreedomTest проверяет что в вашем решении не используются блокировки.

Формат сдачи

Выполняйте задание в этом репозитории. Инструкции по сдаче заданий находятся в этом документе.