Пример 11

Предположим, что есть два ресурса, используемые двумя задачами, Задача High и Задача Low, где имена задачи соответствуют их приоритетам. Если Задача Low обращается к Ресурсу 1 (запускающаяся во время 1 и отмеченная наклонными чертами вправо в Рисунке 5), и Задача High резервирует ее (во время 2), то Задача High может хотеть обратиться к Ресурсу 2 (отмеченный наклонными чертами влево) и затем, перед отпусканием Ресурса 2, выполнить вложенный доступ к Ресурсу 1 (во время 3). Поскольку Ресурс 1 блокирован Задачей Low, которая не может выгрузиться, то Задача High не может продолжиться, используя Ресурс 1 до окончания Задачей Low ее собственного использование этого ресурса. Однако, если Задача Low, при все еще использовании Ресурса 1, делает запрос к Ресурсу 2 (во время 4), который в настоящее время блокирован Задачей High, происходит классический тупик. Этой ситуации (то есть взаимно вложенных запросов к ресурсам) просто избежать, и каждый практик сказал бы, что это конструкторская недоработка. Однако, вторая Проблема – множественное блокирование - все еще возможна.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: