一、背景
又是关于汇编,头真是大,当年欠吴旭老师的汇编终究还是要还的。
在看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)
本文介绍了内嵌汇编中的cmpxchgq指令,讲解了其在C/C++代码中的应用,特别是在进程同步和无锁机制中的作用。通过详细解析代码,阐述了cmpxchgq如何进行比较并交换操作,以及在GCC内嵌汇编中的使用方式。
最低0.47元/天 解锁文章
6439

被折叠的 条评论
为什么被折叠?



