📌 Starvation

Starvation — ситуация в многозадачной системе, при которой один или несколько потоков/процессов постоянно откладываются в доступе к ресурсу из-за приоритета других. Поток «голодает», не получая CPU, Mutex или другие ресурсы.

🧠 Как работает

Голодание возникает, когда:

  • Система планирования всегда выбирает другие (более приоритетные) задачи
  • Алгоритм захвата ресурсов несправедлив (например, без очереди FIFO)
  • Один поток постоянно «выталкивается» из конкурентной среды

Отличие от Deadlock — starvation не означает полной остановки всех потоков, только одного или группы.

Причины:

⚙️ Где возникает

КонтекстОписание
Realtime SystemНизкоприоритетные задачи не исполняются
Mutex / LockНет справедливого порядка ожидания
Kernel SchedulingЯдро не даёт квант времени слабым потокам
DatabaseОдна транзакция не получает доступ к строкам

✅ Преимущества

(Отсутствуют — это дефект системы.)

❌ Недостатки

  • Зависание процессов без блокировок
  • Снижение производительности и предсказуемости
  • Невозможность гарантии выполнения
  • Особенно критично в RTOS и серверных приложениях

🛡 Методы предотвращения

  • Priority Inheritance
  • Введение aging (повышение приоритета со временем)
  • Использование справедливых очередей (Fair Mutex, Ticket Lock)
  • Таймауты ожидания или отложенное повторение