DBMS 必定实现了锁机制,但是可能实现方案不同。
比如,我们这里有一个行资源。实现锁机制有以下不同的方案:
1. 实现一个锁管理器用来对系统中所有的锁进行管理。当一个用户试图对该行锁定时,首先查找所管理器,确认该行没有被其他应用占用。
2. 不实现锁管理器。由该行确认其是否被锁定。 既然要锁定该行,那么直接问这一行她之前是否已经被锁定好了。如果没有,就锁定;已被锁定,则等待。
可以看出,方案2 优点是比较明显的。只需要访问该行,就可确定是否锁定,而不需要去询问第三方(锁管理器)。但是很明显的,我们给该行打了标签,必然会占用一定的内存。而频繁的锁定释放也会占用一定的系统资源。不过相对于带来的优势来说,还是比较划算的。
Oracle 中的 latch(闩): 一种锁,用户协调对内存,对象等的访问。例如一个加载到内存中的多行。可能对一行的修改就需要修改整个内存块的组织结构。因此需要一种轻量级的锁机制来控制。