c-你如何解释这个程序集



从nginx:中提取

static ngx_inline ngx_atomic_uint_t
ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
ngx_atomic_uint_t set)
{
    u_char res;
    __asm__ volatile (
    NGX_SMP_LOCK
    " cmpxchgl %3, %1; "
    " sete %0; "
    : "=a" (res) : "m" (*lock), "a" (old), "r" (set) : "cc", "memory");
    return res;
}

我不理解汇编指令的组合语法(它使用的语法与printf使用的语法不同),它到底在做什么?

考虑到这一点并忽略操作的原子性,函数等效于:

 static ngx_inline ngx_atomic_uint_t
 ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old,
 ngx_atomic_uint_t set)
 {
     u_char res;
     if (*lock == old){
         *lock = set;
         res = 1;
     } else{
         res = *lock
     }
     return res;
  }

最新更新