• 函数lock_rec_set_nth_bit


     

    lock 分配内存 

    lock = mem_heap_alloc(trx->lock_heap, sizeof(lock_t) + n_bytes);

    内存分配图

    0xxx 2 xxx
    0xxx3 sizeof(lock_t)
    0xxx15 n_bytes
    0xxx19 xxx

    上面分配的内存是连续的,不会造成碎片

    lock[0] 为 0xxx3

    lock[1] 为 0xxx15 或 lock+sizeof(lock_t)

    n_bytes 假设为5, 即5个字节,每个字节8位, 可以理解为 二维数组 5行8列

    /**********************************************************************//**
    Sets the nth bit of a record lock to TRUE. */
    UNIV_INLINE
    void
    lock_rec_set_nth_bit(
    /*=================*/
        lock_t*    lock,    /*!< in: record lock */
        ulint    i)    /*!< in: index of the bit */
    {
        ulint    byte_index;
        ulint    bit_index;
    
        ut_ad(lock);
        ut_ad(lock_get_type_low(lock) == LOCK_REC);
        ut_ad(i < lock->un_member.rec_lock.n_bits);
    
        byte_index = i / 8;
        bit_index = i % 8;
    
        ((byte*) &lock[1])[byte_index] |= 1 << bit_index;
    }

     

  • 相关阅读:
    PHP对象
    MySQL多表更新
    使用not in的子查询
    MySQL比较运算符的子查询
    控制器调用函数
    MVC目录规范
    MVC流程
    mxnet安装
    离线安装Python包hickle,easydict
    深度学习基础
  • 原文地址:https://www.cnblogs.com/taek/p/4942654.html
Copyright © 2020-2023  润新知