Salah satu cara untuk menjamin terjadi serialisasi adalah dengan menerapkan protokol penguncian (locking protocol) pada tiap data yang akan diakses. Ada dua macam cara untuk melakukan penguncian pada data:
Shared . Jika sebuah transaksi Ti melakukan shared-mode lock pada data Q, maka transaksi tersebut dapat melakukan operasi read pada Q tetapi tidak dapat melakukan operasi write pada Q.
Exclusive . Jika sebuah transaksi Ti melakukan exclusive-mode lock pada data Q, maka transaksi tersebut dapat melakukan read dan write pada Q.
Setiap transaksi harus melakukan penguncian pada data yang akan diakses, bergantung pada kebutuhan operasi yang akan dilakukan. Proses pengaksesan data Q sebuah transaksi Ti adalah sebagai berikut:
Menentukan mode penguncian yang akan dipergunakan
Memeriksa apakah data Q sedang dikunci oleh transaksi lain. Jika tidak, Ti dapat langsung mengakses Q, jika ya, Ti harus menunggu (wait).
Bila mode penguncian yang diinginkan adalah exclusive-lock mode, maka Ti harus menunggu sampai data Q dibebaskan.
Bila mode penguncian yang diinginkan adalah shared-lock mode, maka Ti harus menunggu sampai data Q tidak berada dalam exclusive-mode lock oleh data lain. Dalam hal ini data Q bisa diakses bila sedang dalam keadaan bebas atau shared-mode lock.
Sebuah transaksi dapat melakukan pembebasan (unlock) pada suatu data yang telah dikunci sebelumnya setelah data tersebut selesai diakses. Namun, proses pembebasan data tidak langsung dilakukan sesegera mungkin karena sifat serializable bisa tidak terjaga. Oleh karena itu, ada pengembangan lebih lanjut dari protokol penguncian yang disebut two-phase locking protocol. Protokol ini terdiri dari dua fase, yaitu:
Growing phase . Fase dimana sebuah transaksi hanya boleh melakukan penguncian pada data. Pada fase ini, transaksi tidak boleh melakukan pembebasan pada data lain.
Shrinking phase . Fase dimana sebuah transaksi melakukan pembebasan pada data. Pada fase ini, transaksi tidak boleh melakukan penguncian pada data lain.
Pada banyak kasus,
two-phase locking protocol banyak
dipergunakan untuk menjaga sifat
serializable dari suatu
penjadwalan, namun protokol ini belum dapat menjamin bahwa tidak
akan terjadi
deadlock karena masih ada transaksi
yang berada dalam status menunggu
(
wait()).