zoukankan      html  css  js  c++  java
  • 数据库锁的相容性矩阵

    把自己的知乎答案搬来了

    从多粒度树的角度着手理解。

    在多粒度封锁中,若对一个节点加锁(X、S),意味着这个点的后裔节点也被加以同样的锁。若对一个节点加意向锁,则说明正在对其子节点加(对应的)锁(可理解为一个事务中的先后次序)。任意节点加(X,S)锁时,必须对其所有上级节点加意向锁。多粒度封锁的加锁顺序是自顶向下,释放锁的顺序是自下而上。

    上级节点加的意向锁不影响当前节点和其子节点上锁的相容性。

    设有事务AB,都对同一数据对象r加锁。

    X锁排他,故只要A对r加X锁,B不能再对r及其子节点加锁。

    S锁,若A对r加S锁,则r及其子节点均加S锁,故r及其子节点不能加X锁。也就是说B不能对r加X,IX,SIX这些包含X的锁。

    IX锁,若A对r加IX锁,则r到该节点路径上的节点全加IX锁,该节点及其子节点全加X锁。为了保证加了X锁的那个子节点上面不加其他的锁,故B一定不能对r加X,S,SIX锁。而至于IS,IX锁,B是可以对r加的,因为要加X,S锁的那个节点可能不同。若要加锁的节点相同则再用X,S锁的相容矩阵解释冲突。

    SIX锁,若A对r加SIX锁,对则r先加了S锁,释放后再加IX锁(一次操作中的先后次序),r的子节点分别对应加锁。故B不能对r加{X,SIX,IX锁}并上{X,S,SIX锁}。

    IS锁,若A对r加IS锁,那么r到要加S锁的节点路径上的节点全加IS锁,该节点及其子节点全加S锁。故B不能对其加X锁。至于IX,SIX锁是可以加的,因为对应要加锁的子节点可能不同,相同时再按X,S锁的相容矩阵判别即可。

  • 相关阅读:
    云时代架构读后感
    余额宝技术架构读后感
    shiyan
    11111
    编写hdfs文件遇到的问题
    123
    啦啦啦
    Hadoop安装
    js根据银行卡号进行判断属于哪个银行并返回银行卡类型
    git 使用
  • 原文地址:https://www.cnblogs.com/yuelien/p/12580089.html
Copyright © 2011-2022 走看看