判断是否预加锁的模式 要强壮于 已添加的lock锁模式

  1. /*********************************************************************//**
  2. Checks if a transaction has a GRANTED explicit lock on rec stronger or equal
  3. to precise_mode.
  4. @return lock or NULL */
  5. UNIV_INLINE
  6. lock_t*
  7. lock_rec_has_expl(
  8. /*==============*/
  9. ulint precise_mode,/*!< in: LOCK_S or LOCK_X
  10. possibly ORed to LOCK_GAP or
  11. LOCK_REC_NOT_GAP, for a
  12. supremum record we regard this
  13. always a gap type request */
  14. const buf_block_t* block, /*!< in: buffer block containing
  15. the record */
  16. ulint heap_no,/*!< in: heap number of the record */
  17. trx_t* trx) /*!< in: transaction */
  18. {
  19. lock_t* lock;
  20.  
  21. ut_ad(mutex_own(&kernel_mutex));
  22. ut_ad((precise_mode & LOCK_MODE_MASK) == LOCK_S
  23. || (precise_mode & LOCK_MODE_MASK) == LOCK_X);
  24. ut_ad(!(precise_mode & LOCK_INSERT_INTENTION));
  25.  
  26. lock = lock_rec_get_first(block, heap_no); //函数实现while (lock) {
  27. if (lock->trx == trx
  28. && !lock_is_wait_not_by_other(lock->type_mode)
  29. && lock_mode_stronger_or_eq(lock_get_mode(lock),
  30. precise_mode & LOCK_MODE_MASK)
  31. && (!lock_rec_get_rec_not_gap(lock)
  32. || (precise_mode & LOCK_REC_NOT_GAP)
  33. || heap_no == PAGE_HEAP_NO_SUPREMUM)
  34. && (!lock_rec_get_gap(lock)
  35. || (precise_mode & LOCK_GAP)
  36. || heap_no == PAGE_HEAP_NO_SUPREMUM)
  37. && (!lock_rec_get_insert_intention(lock))) {
  38.  
  39. return(lock);
  40. }
  41.  
  42. lock = lock_rec_get_next(heap_no, lock);
  43. }
  44.  
  45. return(NULL);
  46. }

函数lock_rec_has_expl的更多相关文章

  1. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  5. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  6. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  7. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  8. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  9. C++中的时间函数

    C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...

随机推荐

  1. xml string 相互转换

    一.使用最原始的javax.xml.parsers,标准的jdk api // 字符串转XMLString xmlStr = /"....../";StringReader sr ...

  2. 【leetcode】Multiply Strings(middle)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  3. Office 2013 note

    1.每次打开重新配置: 问题表现:启动后发现每次打开都会出现“正在配置”的进度 执行:reg add HKCU\Software\Microsoft\Office\15.0\Word\Options ...

  4. 堆排序 Heap Sort

    堆排序虽然叫heap sort,但是和内存上的那个heap并没有实际关系.算法上,堆排序一般使用数组的形式来实现,即binary heap. 我们可以将堆排序所使用的堆int[] heap视为一个完全 ...

  5. android模拟器(genymotion)+appium+python 框架执行基本原理(目前公司自己写的)

    android模拟器(genymotion)+appium+python 框架执行的基本过程: 1.Push.initDate(openid)方法     //业务数据初始化 1.1   v5db.p ...

  6. linux下修改history命令保存条数

    在linux系统下.history命令会保存多少条命令呢?曾在一本书上说,如果注销系统,那么会将所有的历史命令都定入到~/.bash_history, 但只保留1000条命令(这个是由默认的shell ...

  7. 获取手机的UUID

     获取手机的UUID 01 连接手机到电脑 02 - 在XCOde中,选择Window->Devices

  8. C/C++类型转换

    1.隐式类型转换 1.1 隐式类型转换的规则 K & R A.6.5 Arithmetic Conversions(数值型间的转换)First, if either operand is lo ...

  9. -ffunction-sections -Wl,--gc-sections

    AVR/GCC设置不链接未调用的函数 http://blog.csdn.net/shevsten/article/details/7049688 在AVR Studio4/5的AVR/GCC默认设置下 ...

  10. mysql 常用命令(备忘)

    1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE ...