Я бы не сказал, что истощение ресурсов - это особый случай livelock. Обычно:
В livelock ни один поток не прогрессирует, но продолжает работать. (В тупике они даже не продолжают исполняться)
При голодании некоторые потоки МОГУТ прогрессировать, а некоторые потоки не выполняются.
Хорошее объяснение: http://docs.oracle.com/javase/tutorial/essential/concurrency/starvelive.html. Но я понимаю, что выбор терминологии может отличаться.
Когда дело доходит до голода, я слышал определение:
Предположим, что можно указать бесконечный путь выполнения (чередование), согласующийся с предположениями (семантика семафора, поведение планировщика ОС ...), так что поток T приостанавливается в ожидании некоторого ресурса и никогда не возобновляется, даже если это было возможно бесконечно много раз. Тогда T называется голодающим.
Но практика не соответствует этому. Предположим, что два потока выполняют критическую секцию в бесконечном цикле. Ваш код синхронизации позволяет первому потоку входить в критический раздел один раз в час. Это голод? Обе темы могут развиваться, но первая медленно и медленно выполняет свою работу.
Простейшим источником голода являются слабые семафоры. Если вы используете примитив синхронизации (или создаете свой собственный), который ведет себя аналогичным образом, это приведет к голоданию.
Классические проблемы, когда голод хорошо известен:
Для получения более подробной информации, я искренне рекомендую Маленькую книгу семафоров (бесплатно): http://www.greenteapress.com/semaphores/.
Вы спрашиваете, вызвано ли каждое голодание ожиданием какого-то ресурса. Я бы сказал - да.
Нить может быть приостановлена:
(1) при некотором блокировании системного вызова - ожидание / получение мьютекса, семафора, условной переменной; написать (), опрос () и т. д.
(2) для некоторой неблокирующей операции, например, для выполнения вычислений.
Голодание (1) - это истощение ресурсов (мьютексы, буфер и т. Д.).
Голодание (2) - это голодание на процессоре - вы можете рассматривать его как ресурс. Если это произойдет, проблема с планировщиком.
НТН