内嵌汇编 - cmpxchgl 指令学习笔记

本文介绍了内嵌汇编中的cmpxchgq指令,讲解了其在C/C++代码中的应用,特别是在进程同步和无锁机制中的作用。通过详细解析代码,阐述了cmpxchgq如何进行比较并交换操作,以及在GCC内嵌汇编中的使用方式。
摘要由CSDN通过智能技术生成

一、背景

又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。
在看nws源码的时候,里面有这样一段代码

static __inline__ unsigned long   
atomic_cmp_set(volatile void *ptr, unsigned long old, 
                    unsigned long set)
{
    unsigned long prev;

    __asm__ volatile(LOCK"cmpxchgq %2,%1"
             : "=a"(prev), "+m"(*(volatile long *)(ptr))
             : "r"(set), "0"(old)
             : "memory");

    return prev;
}

二、基础知识

这段代码是内嵌汇编代码(C与C++代码混合在一起叫内嵌汇编),为什么要使用内嵌汇编代码?可以大大的提升代码的运行速度,在nginx中广泛应用了CAS(compare-and-swap)操作来完成进程同步,也就是nginx的无锁机制,linux内核大量代码亦是如此(比如include/asm-i386/cmpxchg.h)

2.1 内嵌汇编常识介绍

GCC在C语言中内嵌汇编 asm volatile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值