Проблема со спящим парикмахером
-
Проблема спящего парикмахера
- Классическая проблема синхронизации в информатике
- Предложена Эдсгером Дейкстрой в 1965 году
- Иллюстрирует сложности при взаимодействии процессов в ОС
-
Постановка задачи
- Парикмахер и кресло в парикмахерской, зал ожидания с n стульями
- Клиент должен разбудить парикмахера, если тот спит
- Парикмахер засыпает, если нет клиентов или все стулья заняты
-
Сложности
- Риск «гонки» из-за времени на проверку зала ожидания и вход в салон
- Проблема с двумя клиентами, пытающимися занять одно место
- Сложности с координацией работы нескольких парикмахеров
-
Решения
- Использование мьютекса для синхронизации состояний парикмахера и клиента
- Семафоры для индикации состояния системы
- Пример псевдокода для синхронизации без взаимоблокировок
-
Реализация
- Псевдокод гарантирует синхронизацию, но может привести к потере клиента
- Использование очереди FIFO для решения проблемы нехватки ресурсов
- Семафоры с функциями wait() и signal() для синхронизации процессов
-
Дополнительные проблемы
- Упоминание других классических проблем в информатике
- Рекомендации по решению проблем