Ответ
Starvation (голодание) — это ситуация, когда поток долго не может получить доступ к ресурсу из-за того, что другие потоки постоянно его монополизируют.
Причины:
- Высокоприоритетные потоки захватывают ресурс
- Несправедливое планирование (например,
synchronizedв Java) - Долгие операции в критической секции
Пример:
val lock = Any()
thread(priority = Thread.MAX_PRIORITY) {
while (true) {
synchronized(lock) { /* долгая работа */ }
}
}
thread(priority = Thread.MIN_PRIORITY) {
// Этот поток может никогда не получить lock
synchronized(lock) { /* важная работа */ }
}
Решение:
- Использовать
ReentrantLockс fair policy - Уменьшать время работы в критических секциях
- Балансировать приоритеты потоков