📌 Starvation
Starvation — ситуация в многозадачной системе, при которой один или несколько потоков/процессов постоянно откладываются в доступе к ресурсу из-за приоритета других. Поток «голодает», не получая CPU, Mutex или другие ресурсы.
🧠 Как работает
Голодание возникает, когда:
- Система планирования всегда выбирает другие (более приоритетные) задачи
 - Алгоритм захвата ресурсов несправедлив (например, без очереди FIFO)
 - Один поток постоянно «выталкивается» из конкурентной среды
 
Отличие от Deadlock — starvation не означает полной остановки всех потоков, только одного или группы.
Причины:
- Priority Scheduling без инверсии или aging
 - Неочередные Mutex или Semaphore
 - Атомарные операции без fairness (напр. Spinlock)
 - Busy waiting без выхода
 
⚙️ Где возникает
| Контекст | Описание | 
|---|---|
| Realtime System | Низкоприоритетные задачи не исполняются | 
| Mutex / Lock | Нет справедливого порядка ожидания | 
| Kernel Scheduling | Ядро не даёт квант времени слабым потокам | 
| Database | Одна транзакция не получает доступ к строкам | 
✅ Преимущества
(Отсутствуют — это дефект системы.)
❌ Недостатки
- Зависание процессов без блокировок
 - Снижение производительности и предсказуемости
 - Невозможность гарантии выполнения
 - Особенно критично в RTOS и серверных приложениях
 
🛡 Методы предотвращения
- Priority Inheritance
 - Введение aging (повышение приоритета со временем)
 - Использование справедливых очередей (Fair Mutex, Ticket Lock)
 - Таймауты ожидания или отложенное повторение