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锁的相容矩阵判别即可。

  • 相关阅读:
    curl命令学习笔记
    IOS安全测试思维导图
    Hello World
    Hive SQL使用和数据加载的一点总结
    采用最低松弛度优先调度的实时系统调度程序
    MongoDB Map Reduce速度提升20倍的优化宝典
    释放时间不同可中断平行机问题在线算法
    RPC框架系列——Avro
    Solr 3.6.2索引MySQL数据库配置过程
    IKAnalyzer 独立使用 配置扩展词库
  • 原文地址:https://www.cnblogs.com/yuelien/p/12580089.html
Copyright © 2011-2022 走看看