Бесконечные ожидания. Решение проблемы бесконечного ожидания

Ожидание и тупики. При использовании механизма блокировок сталки­ваются с такими двумя нежелательными явлениями, как беско­нечные ожидания и тупиковые ситуации.


Пример бесконечного ожидания:

Tранзакция Т2 время Tранзакция Т1 Tранзакция Т3 Tранзакция Т4
  т1 Блокиро—вание Д    
    Чтение Д    
Попытка блокиро—вания Д – отказ тк      
ожидание... тк+1 Разблоки—рование Д    
      Блокиро—вание Д (раньше, чем Т2)  
      Чтение Д Блокиро—вание Д – отказ
        ожидание…

Предположим, что транзакции T1, T2, Т3, Т4 исполнения программы, содержащей следующие действия: блокирование Д; чтение Д; изменение Д; подтверждение сохранения Д; разблокирование Д. Не исключена возможность того, что транзакция Т2 будет бесконечно находиться в состоянии ожидания, тогда как некоторые другие транзакции постоянно осуществляют блокировку Д, хотя и существует неограниченное число моментов, когда Т2 имеет шансы заблокировать Д. Состояние такого рода называется бесконечным ожиданием. Подобная проблема потенциально может возникнуть в любой обстановке, предусматривающей параллельное исполнение процессов (задача продажи билетов).

Теоретиками предлагаются различные пути решения этой проблемы. Простой способ заключается в том, что система предоставления блокировок должна регистрировать все неудовлетворенные немедленно запросы и предоставлять возможность блокировки элемента Д после его разблокирования первой запросившей его транзакции из числа ожидающих. Стратегия «первый вошел – первым обслужился» устраняет бесконечное ожидание, однако она может привести к тупикам.


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



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