Spec-Zone .ru
спецификации, руководства, описания, API
|
Исчерпание ресурсов и динамическая взаимоблокировка намного менее распространены проблема чем мертвая блокировка, но являются все еще проблемами, с которыми, вероятно, встретится каждый разработчик параллельного программного обеспечения.
Исчерпание ресурсов описывает ситуацию, где поток неспособен получить регулярный доступ к совместно используемым ресурсам и неспособен сделать успехи. Это происходит, когда совместно используемые ресурсы делаются недоступными в течение многих длительных периодов "жадными" потоками. Например, предположите, что объект обеспечивает синхронизируемый метод, который часто занимает много времени, чтобы возвратиться. Если один поток будет часто вызывать этот метод, то другие потоки, которые также нуждаются в частом синхронизируемом доступе к тому же самому объекту, будут часто блокироваться.
Поток часто действует в ответ на действие другого потока. Если действие другого потока является также ответом на действие другого потока, то динамическая взаимоблокировка может закончиться. Как с мертвой блокировкой, livelocked потоки неспособны сделать дальнейшие успехи. Однако, потоки не блокируются — они просто слишком заняты, отвечая друг другу, чтобы возобновить работу. Это сопоставимо с двумя человеками, пытающимися передать друг друга в коридоре: Альфонс перемещается в левую сторону от него, чтобы позволить Гастону передавать, в то время как Гастон перемещается в правую сторону от него, чтобы позволить Альфонсу передавать. Видение, что они все еще блокируют друг друга, Alphone, перемещается в правую сторону от него, в то время как Гастон перемещается в левую сторону от него. Они все еще блокируют друг друга, так...