nginx进程间的通信机制源码分析(二)-------原子操作、自旋锁、文件锁

本文深入分析了nginx的进程间通信机制,重点探讨了原子操作,包括ngx_atomic_cmp_set和ngx_atomic_fetch_add方法,以及自旋锁的概念和在多处理器系统中的应用。同时,还介绍了nginx如何使用文件锁来保护共享数据,详细阐述了fcntl方法在实现文件互斥锁中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原子操作

原子操作指的是由多步组成的一个操作.如果该操作原子的执行,则要么执行玩所有步骤,要么一步也不执行,不可能值执行所有步骤的一个子集.

想要使用原子擦操作来修改,获取整型变量,自然不能使用加减号,而要使用nginx提供的两个方法:ngx_atomic_cmp_set和ngx_atomic_fetch_add.

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)
{
     //当原子变量lock与old相等时,才能把set设置到lock中
     if (*lock == old) {
         *lock = set;
         return 1;      //成功返回1
     }

     return 0;          //失败返回0
}


static ngx_inline ngx_atomic_int_t
ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add)
{
     ngx_atomic_int_t  old;

     old = *value;
     *value += add;     //加上add的值

     return old;        //返回原先value的值
}

自旋锁

(1)  自旋锁时一种非睡眠锁,在获取锁之前,当前进程(线程)不会进入睡眠状态,而是始终保持进程在可执行状态,每当内核调度到这个进程时就持续检查是否可以获取到锁.

(2)  自旋锁主要时为多处理器系统而设

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值