zoukankan      html  css  js  c++  java
  • MySQL 源码中的 ut_a 、 ut_ad

    ut0dbg.h 中,可以看到如下宏

    #ifdef UNIV_DEBUG
    /** Debug assertion. Does nothing unless UNIV_DEBUG is defined. */
    #define ut_ad(EXPR) ut_a(EXPR)
    /** Debug statement. Does nothing unless UNIV_DEBUG is defined. */
    #define ut_d(EXPR) EXPR
    #else
    /** Debug assertion. Does nothing unless UNIV_DEBUG is defined. */
    #define ut_ad(EXPR)
    /** Debug statement. Does nothing unless UNIV_DEBUG is defined. */
    #define ut_d(EXPR)
    #endif
    

    可见, ut_ad 是在开启 UNIV_DEBUG 下的 ut_aut_d 是开启 UNIV_DEBUG 下才执行 EXPR;当 UNIV_DEBUG 关闭时, EXPR 均不执行。

    /** Abort execution if EXPR does not evaluate to nonzero.
    @param EXPR assertion expression that should hold */
    #define ut_a(EXPR)                                               
      do {                                                           
        if (UNIV_UNLIKELY(!(ulint)(EXPR))) {                         
          ut_dbg_assertion_failed(#EXPR, __FILE__, (ulint)__LINE__); 
        }                                                            
      } while (0)
    
    /* Tell the compiler that cond is unlikely to hold */
    #define UNIV_UNLIKELY(cond) UNIV_EXPECT(cond, FALSE)
    

    例子如下,在开启 UNIV_DEBUG 时,会执行 lock_mutex_own()trx_mutex_own(),并且会在其返回值为 0 时报错。

    const trx_t *DeadlockChecker::check_and_resolve(const lock_t *lock,
                                                    trx_t *trx) {
      ut_ad(lock_mutex_own());
      ut_ad(trx_mutex_own(trx));
      check_trx_state(trx);
      ut_ad(!srv_read_only_mode);
    
  • 相关阅读:
    java面向对象编程(七)--四大特征之多态
    java面向对象编程--Josephu问题(丢手帕问题)
    好文推荐
    树状数组学习笔记
    B2104 矩阵加法
    B2107 图像旋转
    B2128 素数个数
    求细胞数量
    洛谷 CF863A Quasi-palindrome
    30秒搞定所有英文连读
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/12372330.html
Copyright © 2011-2022 走看看