Код 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
- Храните для каждого потока номер следующего шага и прочитанное значение.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.