1、加锁与解锁
��封锁协议的主要内容是:
��⑴�加锁:要访问一个数据项,事务T必须首先申请给该数据项加锁。如果该数据项已被另一事务加上了不相容类型的锁,则在所有不相容类型的锁被释放之前,并发控制管理器不会授予事务T申请的锁。因此T必须等待,直到所有不相容类型的锁被释放;
��⑵�解锁:只要事务T还在访问某数据项,它就必须拥有该数据项上的锁。除此之外,事务T可以随时释放先前它加在某个数据项上的锁。
2、加锁与解锁指令
��加锁指令:
��-�lock-S(Q):申请数据项Q上的共享锁;
��-�lock-X(Q):申请数据项Q上的排他锁。
��解锁指令:
��-unlock(Q):释放数据项Q上的锁。
如图11-1-2所示,给出的是两个带有加锁和解锁指令的事务。
|
图11-1-2:带锁的事务
|
3、带锁的调度
��如图11-1-3所示,给出的是一个带锁的调度。 |
图11-1-3:带锁的调度
|
正如图中所示,事务T1的lock-X(B)表示申请对数据项B加排他锁,该请求是发送给并发控制管理器的,如第三栏所示。并发控制管理器首先检查是否可以授予事务T1的数据项B上的排他锁,如果可以,则通过grant-X(B,
T1)指令在将要执行事务T1的read(B)指令之前将锁授予;如果不可以,则事务T1就必须等待。今后为了讲课方便,将省略"并发控制管理器"授权加锁的这一栏。 |