zoukankan      html  css  js  c++  java
  • innodb锁之间的兼容性判断

    检查锁与锁之间的兼容性

    路径:/mysql-5.5.43/storage/innobase/lock/lock0lock.c 

    实现:见锁的强度比较

     row 可理解为 lock 的锁模式

     column 可理解为 预加锁的模式

    反过来也行

    速记:只要包括X字符,跟谁都不兼容

    /* LOCK COMPATIBILITY MATRIX
     *     IS    IX    S    X     AI
     * IS  +     +     +    -     +
     * IX  +     +     -    -     +
     * S   +     -     +    -     -
     * X   -     -     -    -     -
     * AI  +     +     -    -     -
     *
     * Note that for rows, InnoDB only acquires S or X locks.
     * For tables, InnoDB normally acquires IS or IX locks.
     * S or X table locks are only acquired for LOCK TABLES.
     * Auto-increment (AI) locks are needed because of
     * statement-level MySQL binlog.
     * See also lock_mode_compatible().
     */
    
    /*********************************************************************//**
    Calculates if lock mode 1 is compatible with lock mode 2.
    @return    nonzero if mode1 compatible with mode2 */
    UNIV_INLINE
    ulint
    lock_mode_compatible(
    /*=================*/
        enum lock_mode    mode1,    /*!< in: lock mode */
        enum lock_mode    mode2)    /*!< in: lock mode */
    {
        ut_ad(mode1 == LOCK_X || mode1 == LOCK_S || mode1 == LOCK_IX
              || mode1 == LOCK_IS || mode1 == LOCK_AUTO_INC);
        ut_ad(mode2 == LOCK_X || mode2 == LOCK_S || mode2 == LOCK_IX
              || mode2 == LOCK_IS || mode2 == LOCK_AUTO_INC);
    
        return((LOCK_MODE_COMPATIBILITY) & LK(mode1, mode2));
    }
  • 相关阅读:
    【hdu 6214】Smallest Minimum Cut
    Spring Boot核心配置
    Spring Cloud是什么?
    Spring Boot开启的2种方式
    JVM运行时区域详解。
    史上最全Java多线程面试题及答案
    Git文件操作命令
    Git的安装配置
    Git SSH连接方式配置
    Intellij Idea乱码解决方案都在这里了
  • 原文地址:https://www.cnblogs.com/taek/p/4938901.html
Copyright © 2011-2022 走看看