l 对象锁 (per-object locks)
除了IX锁,其他类型都可以用于其他命名空间,这部分是最常用的锁类型。主要用于对数据库的某个具体元数据的并发控制。这类锁对象会比较多,对其有独特的管理,本文不再展开说明。
5.3 两种锁类型
根据锁的兼容性、以及通用性将锁分为两类。
5.3.1互不干扰型(unobtrusive)
unobtrusive锁相互间兼容,并且适用于所有DML操作。这类锁获取后不用记录下具体哪个线程申请的,只需要记录下有多少个请求已经获得,通过锁对象下64位原子变量来计数,因此对其他连接的锁申请影响很小,表现比较低调。在64位中每种类型锁都有由固定的位范围存放加锁个数。对于scoped与per-object是不同锁对象,因此位分别设置。
scoped locks: IX(0~59位)
per-object locks: S,SH(0~19位),SR(20~39位), SW(40~59位)
注意分配20位的不会产生溢出,因为当前设计不会同时有超过2^20 - 1个连接。