Добавлен: 28.11.2018

Просмотров: 5422

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

111

Процедуры

   

детекции

 

взаимоблокировки

   

завершают

   

свою

  

работу

,  

отменяя

   

одну

   

из

   

транзакций

   

и

   

продвигая

   

следую

-

щую

  

транзакцию

  

в

  

очереди

Другой

   

способ

   

контроля

   

параллельной

   

обработки

    -   

двух

-

фазная

  

блокировка

.  

Говорят

,  

что

  

транзакция

  

следует

  

протоко

-

лу

  

двухфазной

  

блокировки

,  

если

  

все

  

операции

  

блокировки

  -  

read_lock,  write_lock  -  

предшествуют

   

первой

   

операции

   

раз

-

блокирования

  

в

  

транзакции

.  

Опция

  read_lock  

позволяет

  

счи

-

тывать

  

запись

,  

а

  write_lock  

позволяет

  

и

  

считывать

,  

и

  

обнов

-

лять

   

данную

   

запись

.  

Проверено

,  

что

   

транзакции

   

могут

   

вы

-

полняться

  

так

,  

что

  

их

  

результаты

  

будут

  

такими

  

же

,  

как

  

если

  

бы

  

они

  

выполнялись

  

одна

  

за

  

другой

  

без

  

прерывания

.  

Одна

-

ко

   

у

   

двухфазной

   

блокировки

   

тоже

   

есть

   

свои

   

недостатки

.  

Она

  

может

  

привести

  

к

  

взаимоблокировке

,  

если

 

совместно

  

с

  

ней

  

не

  

применяется

  

протокол

  

предотвращения

  

взаимоблоки

-

ровки

В

   

качестве

   

примера

   

на

   

рис

. 5.6  

видим

   

процедуру

   

двух

-

фазной

  

блокировки

,  

приводящую

  

к

  

взаимоблокировке

.   

 

                   

Значения

                                           

Значения

 

                   

записей

 

об

                                        

записей

 

об

 

                  

индейках

 (

И

)                                     

индейках

 (

И

)  

                    

и

 

окороках

                                        

и

 

окороках

  

                        (

О

)                                                      (

О

)  

Т

1                                                                       

Т

  Read_lock (O)        

Запрещено

  

Read_lock(

И

)  

      

Чтение

  

элемента

 

О

        

О

=100                

Чтение

 

элемента

 

И

    

И

=30 

 
Write_lock(

И

)  

Запрещено

  

 

 

 

Write_lock(

О

)  

 

Разблокирование

  

О

            

И

=30                      

Разблокирование

 

И

 

  

Чтение

  

элемента

  

И

                                           

Чтение

  

элемента

  

О

 

  

И

=

И

-25                                                                

О

=

О

-25 

  

Запись

  

элемента

  

И

             

И

=5                       

Запись

  

элемента

  

О

 

         Разблокирование

  

И

                                           

Разблокирование

  

О

  

 

 

Рис

.5.6 

Пример

 

двухфазной

 

блокировки

приведшей

 

к

 

взаимоблокировке

 

 

Транзакция

  1  (

Т

1)  

задает

  

опцию

  read_lock  

для

  

записи

  

О

 

(

окорок

);  

одновременно

  

Т

задает

  

опцию

  read_lock    

для

  

за

-

писи

  

И

  (

индейка

).  

Через

 

два

  

шага

  

и

  

Т

1,  

и

  

Т

2  

требуют

  

оп

-

цию

  write_lock  

для

  

той

  

записи

которая

  

удерживается

  

опцией

  


background image

 

112

read_lock  

другой

  

транзакции

.  

Такое

  

действие

  

запрещено

,  

так

  

как

  

в

  

этом

  

случае

  

значение

  

может

  

быть

  

изменено

  

операци

-

ей

  

записи

,  

выполненной

  

другой

  

транзакцией

.  

Тогда

  

конкури

-

рующий

   

источник

   

опции

  read_lock  

может

   

считать

   

неверное

  

значение

.     

Применение

 

двухфазной

  

блокировки

  

с

  

протоколом

  

предот

-

вращения

   

взаимоблокировки

   

показано

   

на

   

рис

.5.7.  

Добавили

  

требование

  

того

,  

чтобы

  

все

  

элементы

  

данных

,  

необходимые

  

в

   

транзакции

блокировались

   

заранее

.  

Если

   

какие

-

либо

   

из

  

элементов

  

данных

  

недоступны

,  

то

  

ни

 

один

  

элемент

  

не

  

бло

-

кируется

   

и

   

транзакция

   

задерживается

   

до

 

тех

 

пор

пока

   

все

  

нужные

  

ей

  

элементы

  

не

  

будут

  

доступны

 

                   

Значения

                                           

Значения

 

                   

записей

 

об

                                        

записей

 

об

 

                  

индейках

 (

И

)                                     

индейках

 (

И

)  

                    

и

 

окороках

                                        

и

 

окороках

  

                        (

О

)                                                      (

О

)  

Т

1                                                                       

Т

  Read_lock (

О

)                              

  Write_lock (

И

)                    

О

=100                 (

ожидание

  

Чтение

  

элемента

  

О

 

  

Разблокирование

  

О

          

И

=30                       

  

Чтение

  

элемента

  

И

                                            

  

И

=

И

-25                                                                 

  

Запись

  

элемента

  

И

           

И

=5                        

   

Разблокирование

  

И

                                         

                                                                 Write_lock (

О

)        

                                                                 Read_lock (

И

)                            

                                                                 

Чтение

 

элемента

  

О

     

О

=100 

                                                                 

О

=

О

-25                                       

                                                                 

Запись

  

элемента

  

О

     

О

=75   

                                                                 

Разблокирование

  

О

  

                                                                 

Чтение

  

элемента

  

И

      

И

=5  

                                                                 

Разблокирование

  

И

  

 

 

Рис

.  5.7. 

Пример

  

двухфазной

  

блокировки

  

с

  

протоколом

 

предотвращения

  

взаимоблокировки

 

 

На

   

рис

.5.8  

приведен

   

пример

,  

демонстрирующий

   

парал

-

лельные

   

операции

,  

которые

   

можно

   

привести

   

к

   

последова

-

тельной

  

форме


background image

 

113

                   

Значения

                                           

Значения

 

                   

записей

 

об

                                        

записей

 

о

 

                  

индейках

 (

И

)                                     

говядине

 (

Г

)  

                    

и

 

окороках

                                        

и

 

окороках

  

                        (

О

)                                                      (

О

)  

Т

1                                                                       

Т

  Read_lock (

О

)                              

  Write_lock (

И

)                    

О

=100                 (

ожидание

  

Чтение

  

элемента

  

О

 

  

Разблокирование

  

О

          

И

=30           Write_lock (

О

)                

  

Чтение

  

элемента

  

И

                              Read_lock (

Г

)                           

  

И

=

И

-25                                                 

Чтение

  

элемента

  

О

     

О

=100  

  

Запись

  

элемента

  

И

           

И

=5             

О

=

О

-25                                    

  

Разблокирование

  

И

                              

Запись

  

элемента

  

О

     

О

=75  

                                                                   

Разблокирование

  

О

  

                                                                   

Чтение

  

элемента

  

Г

      

Г

=60 

                                                                   

Разблокирование

  

Г

 

 

 

Рис

.5.8.  

Пример

 

двухфазной

 

блокировки

 

с

 

протоколом

  

избежания

 

взаимоблокировки

в

 

результате

 

которого

  

выполняется

 

последовательная

 

обработка

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


background image

 

114

ЛИТЕРАТУРА

 

 

1. 

Карпова

 

Т

Базы

 

данных

Модели

разработка

реализация

. –

СПб

., 2001. 

2. 

Глушаков

 

С

.

В

., 

Ломотько

 

Д

.

В

Базы

 

данных

Учебный

 

курс

.-

М

., 2000. 

3. 

Базы

 

данных

 / 

Под

ред

А

.

Д

Хомоненко

. – 

СПб

., 2000. 

4. 

Базы

 

данных

Разработка

 

и

 

управление

 / 

Под

ред

С

Кара

-

тыгинах

. - 

М

., 1999.