大家好,我是热心的大肚皮,皮哥。
锁的前世
上一篇我们聊了事务在并发执行时可能引发一致性的各种现象,大概分为3种。
那怎么避免呢?有两种可选的解决方案。
其实,上面的数据结构也就是锁。
锁的分类
行锁
针对记录的锁分为两类,如下。
其中,S锁与S锁是兼容的,S锁与X锁是不兼容的,X锁与X锁也是不兼容的。
表锁
对于表来说,除了有上面两种行锁之外,额外多了一种叫意向锁的东西。如下。
为什么要这么操作呢?其实不难想象,我们操作记录的时候会打上行锁,那么当我们进行表的操作时,根据意向锁可以使效率更高效,不然只能遍历。
总结一下兼容性。如下。
兼容性 | X | IX | S | IS |
---|---|---|---|---|
X | 不兼容 | 不兼容 | 不兼容 | 不兼容 |
IX | 不兼容 | 兼容 | 不兼容 | 不兼容 |
S | 不兼容 | 不兼容 | 兼容 | 兼容 |
IS | 不兼容 | 兼容 | 兼容 | 兼容 |
看到这个大家是不是有点晕,以大学教室为例。
除了针对教室而言,也还会有其他的需求。
但是这样有一个问题,如果撤掉X锁,我们需要把所有的教室的情况都要摸清楚,这样性能太差了,所以引入了意向锁的概念。
之后: