Хабр, как известно, не место для игр, но мы нашли одно исключение, которое, как нам кажется, достойно упоминания здесь!
Встречайте: Deadlock Empire!
Суть игры — управление планировкой потоков, код которых приведен в заданиях. Управлять нужно так, чтобы добиться ошибочной ситуации: взаимблокировки, повторных значений счетчиков, достижения определенных участков кода и прочих непредвиденных ситуаций, которые нужно осознавать при разработке многопоточных приложений.
Геймплей представляет из себя пошаговое выполнение потоков программы в отладчике с той разницей, что здесь вы буквально говорите выбранному потоку выполнить следующую строчку кода, а не вставляете в его код брейкпоинт. Обычно за раз выполняется одна строчка кода, но если строчка представляет неатомарную операцию, ее нужно вручную развернуть, чтобы выполнить составляющие ее операции по одной. При этом вы не полностью владеете ситуацией: если процесс заблокируется, например, на мьютексе, он будет неактивным, пока другой поток его не освободит.
Задания упорядочены по сложности и объединены в разделы:
- Несинхронизированный код. Задания в этом разделе дают базовые понятия о том, что происходит при параллельном выполнении потоков, использующих общие потоконебезопасные ресурсы.
- Блокировки. Раздел дает представление о том, что бывает, если не корректно использовать базовые примитивы синхронизации.
- Высокоуровневые примитивы синхронизации. Демонстрирует ошибки и заблуждения, встречающиеся при использовании синхронизации на основе событий.
- Семафоры. Название говорит за себя, тут начинается веселье!
- Условные переменные. Показывает, как использование условий может вмешаться в синхронизацию потоков.
- Финал. В нем вам придется использовать все полученные ранее знания, чтобы сразится с реальными соперниками: защититься от огнедышащего дракона, его электрифицированной версии, и в финале рассеять тьму и зло!
Код примеров написан на C#, а примитивы синхронизации взяты из .Net, но, даже если вы не знакомы ни с тем ни с другим, вас не должно это пугать. Минимальные знания программирования и способность читать на английском (все задания снабжены комментариями и ссылками на документацию) с высокой вероятностью позвонят вам дойти как минимум до середины. Ну а сеньеры (даже 23-х летние) наверняка одолеют босса, который появится в финале! И даже съевшие собаку на синхронизации потоков хорошо проведут время, решая интересные задачи, поскольку авторам удалось сделать веселым то, что в реальной жизни представляет один из самых страшных кошмаров для разработчика.
Игра полезна как инструмент для обучения и строго рекомендована всем начинающим разработчикам, как минимум, на .Net и Java.
Желаем всем хорошей пятницы и скорейшей победы над Боссом! :)
Автор: AvanpostID