Deadlock Empire — игра для разработчиков


    Хабр, как известно, не место для игр, но мы нашли одно исключение, которое, как нам кажется, достойно упоминания здесь!

    Встречайте: Deadlock Empire!

    Суть игры — управление планировкой потоков, код которых приведен в заданиях. Управлять нужно так, чтобы добиться ошибочной ситуации: взаимблокировки, повторных значений счетчиков, достижения определенных участков кода и прочих непредвиденных ситуаций, которые нужно осознавать при разработке многопоточных приложений.

    Геймплей представляет из себя пошаговое выполнение потоков программы в отладчике с той разницей, что здесь вы буквально говорите выбранному потоку выполнить следующую строчку кода, а не вставляете в его код брейкпоинт. Обычно за раз выполняется одна строчка кода, но если строчка представляет неатомарную операцию, ее нужно вручную развернуть, чтобы выполнить составляющие ее операции по одной. При этом вы не полностью владеете ситуацией: если процесс заблокируется, например, на мьютексе, он будет неактивным, пока другой поток его не освободит.

    Задания упорядочены по сложности и объединены в разделы:

    1. Несинхронизированный код. Задания в этом разделе дают базовые понятия о том, что происходит при параллельном выполнении потоков, использующих общие потоконебезопасные ресурсы.
    2. Блокировки. Раздел дает представление о том, что бывает, если не корректно использовать базовые примитивы синхронизации.
    3. Высокоуровневые примитивы синхронизации. Демонстрирует ошибки и заблуждения, встречающиеся при использовании синхронизации на основе событий.
    4. Семафоры. Название говорит за себя, тут начинается веселье!
    5. Условные переменные. Показывает, как использование условий может вмешаться в синхронизацию потоков.
    6. Финал. В нем вам придется использовать все полученные ранее знания, чтобы сразится с реальными соперниками: защититься от огнедышащего дракона, его электрифицированной версии, и в финале рассеять тьму и зло!

    Код примеров написан на C#, а примитивы синхронизации взяты из .Net, но, даже если вы не знакомы ни с тем ни с другим, вас не должно это пугать. Минимальные знания программирования и способность читать на английском (все задания снабжены комментариями и ссылками на документацию) с высокой вероятностью позвонят вам дойти как минимум до середины. Ну а сеньеры (даже 23-х летние) наверняка одолеют босса, который появится в финале! И даже съевшие собаку на синхронизации потоков хорошо проведут время, решая интересные задачи, поскольку авторам удалось сделать веселым то, что в реальной жизни представляет один из самых страшных кошмаров для разработчика.

    Игра полезна как инструмент для обучения и строго рекомендована всем начинающим разработчикам, как минимум, на .Net и Java. 

    Желаем всем хорошей пятницы и скорейшей победы над Боссом! :)
    Avanpost
    Безопасность начинается с управления доступом

    Комментарии 5

      +1
      Спасибо! Забавная идея. Обязательно попробую, хотя на .Net ничего не писал. Может за одно и освою это дело, вдруг пригодится?
        0
        Заодно вряд ли получится освоить — слишком простые конструкции там используются, любой псевдокод выглядел бы +- также
        +1
        Все 19 уровней проходятся за час/полтора. Неплохая разминка для мозгов)
          +2

          Идея хорошая, но реализация неполная. Не хватает достаточно важных вещей:


          • запуск/завершение потоков (для примера: запуск и тут же останов треда, который реально не успел запустится или передать управление пользовательскому коду)
          • множество ожидающих тредов на одном объекте (семафоре для примера, на релизе может проснуться любой тред)
          • ожидание и убивание объекта на котором ждем
          • ожидание с таймаутом: два варианта развития: успешно дождался, либо таймаут. Сейчас ветка определяется по состоянию на начало выполнения иструкции, в реалиях в любое время до достижения таймаута
          • различие выполнения одного и того же кода на одном процессоре и на множестве
          • выделение квантов времени тредам (инерция переключения тредов)
            0

            Вообще на сайте есть ссылка на форму для фидбека. Если вы хотите, чтобы разработчик это всё увидел — туда и стоит писать.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.