Голод и Живая блокировка
Голод и живая блокировка - гораздо менее распространенная проблема, чем взаимоблокировка, но все же это проблемы, с которыми может столкнуться каждый разработчик параллельного программного обеспечения.
Голодание
Под голоданием описывается ситуация, когда поток не может получить регулярный доступ к общим ресурсам и не может добиться прогресса. Это происходит, когда «жадные» потоки делят общие ресурсы недоступными в течение длительного времени. Например, предположим, что объект предоставляет синхронизированный метод, который часто занимает много времени для возврата. Если один поток часто вызывает этот метод, другие потоки, которым также требуется частый синхронизированный доступ к тому же объекту, часто блокируются.
* 1014 динамический тупик *
Поток часто действует в ответ на действие другого потока. Если действие другого потока также является ответом на действие другого потока, то может возникнуть прямая блокировка. Как и в случае взаимоблокировки, потоки с блокировкой в реальном времени не могут добиться дальнейшего прогресса. Однако потоки не блокируются - они просто слишком заняты, отвечая друг другу, чтобы возобновить работу. Это сравнимо с двумя людьми, пытающимися обойти друг друга в коридоре: Альфонс движется налево, чтобы пропустить Гастона, а Гастон движется вправо, чтобы пропустить Альфонса. Видя, что они все еще блокируют друг друга, Альфон двигается вправо, а Гастон - слева. Они все еще блокируют друг друга, так что ...