Код Senior GIL, потоки и процессы обновлено

Смоделировать потерю обновления

Условие

Смоделируйте гонку counter += 1. Каждый поток выполняет операцию как два шага: R (прочитать общий счётчик в свой регистр) и W (записать регистр + 1). Дано расписание: список имён потоков, каждое вхождение означает «поток выполняет свой следующий шаг» (шаги чередуются R, W, R, W...). Верните итоговое значение счётчика (начально 0). Незавершённые пары R без W просто не записываются.

Примеры

simulate(["A", "A", "B", "B"]) // 2
simulate(["A", "B", "A", "B"]) // 1
simulate([]) // 0

Как подойти

Подсказки: 1
  1. Храните для каждого потока номер следующего шага и прочитанное значение.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.