Nginx 源码完全剖析(11)ngx_spinlock

本文深入剖析了 Nginx 中的自旋锁(ngx_spinlock)实现,讲解了在多核CPU环境下如何利用 ngx_cpu_pause() 和 ngx_atomic_cmp_set() 实现锁的获取与释放。通过示例解释了 ngx_spinlock 在不同平台上的具体操作,并介绍了 ngx_atomic_cmp_set 的工作原理,涉及GCC内联汇编。
摘要由CSDN通过智能技术生成

Nginx 源码完全剖析(11)ngx_spinlock

Nginx 是多进程模式的,一个 master 与多个 workers,一般工作在多核 CPU 上,所以自旋锁就是必须用到的。Nginx 中的自旋锁的定义,位于 ngx_spinlock.c 中,如下:

void
ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin)
{

#if (NGX_HAVE_ATOMIC_OPS)

    ngx_uint_t  i, n;

    for ( ;; ) {

        // lock 即为锁,是一个整数
        // ngx_atomic_cmp_set 是平台相关的,一般都涉及内联汇编
        
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钟超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值