BD-2st-1.2-w09.tresc-1.1-Slajd12
Algorytm blokowania dwufazowego (1)
Jak widać z poprzedniego przykładu stosowanie blokad na danych nie gwarantuje automatycznie uszeregowalności realizacji zbioru transakcji. Okazuje się, że istotna jest kolejność zakładania i zdejmowania blokad. Ilustruje to podstawowy algorytm blokowania, nazywany algorytmem blokowania dwu-fazowego (2PL). Podstawowa wersja algorytmu 2PL ma następującą postać:
1.Każda operacja odczytu danej X przez transakcję T (read(X )) musi być poprzedzona operacją zablokowania danej X w trybie do odczytu (R_lock(X , T )) lub w trybie do zapisu (W_lock(X , T )).
2.Każda operacja zapisu danej X przez transakcję T (write(X )) musi być poprzedzona operacją W_lock(X , T ).
3.Operacje odblokowania danej X (unlock(x,T )) dla danej transakcji T są wykonywane po zakończeniu wszystkich operacji read i write .
Jak widać z przedstawionego schematu, realizacja transakcji, zgodnie z algorytmem 2PL, przebiega w dwóch fazach (stąd nazwa algorytmu): w fazie ekspansji oraz w fazie zwijania. W fazie ekspansji transakcja zakłada blokady kolejnych danych, nie zwalniając żadnej z uzyskanych blokad, aż do osiągnięcia punktu akceptacji. W fazie zwijania transakcja zwalnia blokady wszystkich danych, nie może żądać natomiast założenia żadnej blokady.