一级封锁协议:在修改时加上x锁,直到事务结束。读时不用加锁。导致了:
二级封锁协议:在一级封锁协议的基础上,如果想读取数据,需要加s锁,读完就释放s锁。这就导致:
1.事务T1在t1时刻读取某数据为a,读完即释放了s锁,但此时事务T1并没有结束。事务T2需要修改数据,加了x锁(由于T1释放了s锁,所以此时没有锁冲突,T2可以修改数据),在事务T2结束时,即t2时刻,才释放x锁。T1在t3时刻再去读取该数据为b,两次读取数据不一致。所以没有解决不可重复度
2.由于在事务T2修改数据时加了x锁,其他事务无法读取该数据,所以其他事务不会读取脏数据。
三级封锁协议:在一级封锁协议基础上,事务T1读取数据时加s锁,直到T1结束释放s锁。这就导致:
1.可以防止丢失修改(参照一级封锁协议)
2.可以防止读脏数据(参照二级封锁协议)
3.在事务T1读取数据时,加了s锁,不可能有其他事务再加x锁修改数据,所以不会导致事务T1不可重复读。同理,在事务T1修改数据时加了x锁,由于锁的冲突,不会有其他事务读该数据,不会导致其他事务不可重复读。
本文发布于:2024-01-31 07:41:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170665808726779.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |