前言
分为三部分
- 数据不一致
- 两段锁协议
- 死锁和活锁
数据不一致
数据不一致的类型有
- 丢失更新:写写冲突。
- 读脏数据:写读冲突,可能造成多米诺效应。
- 不可重复读:读写冲突。
两段锁协议
封锁法只是是保证可串行化的一种机制,还有其他机制。
- 可串行化
- 定理
- 锁的类型
可串行化
n 个事务,有 n! 种可能的串行执行序列。如果,本次并发执行的结果和这 n! 中的任意一个执行结果相等,那么就可认为本次并发执行的结果是正确的。
定理
- 2PL: 申请锁都在前,释放在后。两段锁的两段指的就是申请锁的 growing phrase 和释放锁的 shrinking phrase。
- Well-formed :先申请锁,再对其操作。
可以证明满足 2PL + Well-formed 的并发调度策略一定是可串行化的。
锁的类型
- X锁: 只提供一种锁,排它锁,不论读写。
- (S,X)锁: 写用X,读用S。