乐观 / 悲观的并发控制。它们的定义在 Designing Data-intensive Applications Ch07 中描述得很好:
2PL 是一种 悲观的并发控制(pessimistic concurrency control)机制:如果事情有可能出错(有锁),那就等到情况变得安全(锁被释放)再继续。
SSI 是一种 乐观(optimistic)的并发控制:即使危险状况出现也让事务继续,期望最终是正常的。它在最终事务提交时 判断隔离有没有被违反,如果有,中断事务并需要应用程序重试。
这套理念并不仅可以运用在数据库中,在 Hibernate 这种 data accessing library 中也有类似的 概念。它用了 compare-and-set 的机制来表达乐观锁(事实上并没有上锁)