本章我们讲述一下nginx中进程之间互斥锁的实现。
1. ngx_shmtx_sh_t数据结构
本结构作为实现nginx进程间互斥锁
的辅助存在,要求必须存放与共享内存中。
2. ngx_shmtx_t数据结构
本数据结构用于实现进程间的互斥锁
。当支持NGX_HAVE_ATOMIC_OPS宏定义时采用原子锁来实现,否则采用文件锁来实现。当前我们支持GCC的NGX_HAVE_ATOMIC_OPS
原子操作。
下面我们简要介绍一下各字段的含义:
-
lock: 用于实现原子锁
-
wait: 可以用于记录当前正在sem_wait()信号量的请求者数量
。当前我们支持NGX_HAVE_POSIX_SEM
宏定义
-
semaphore: 用于记录信号量是否创建成功
-
sem: linux信号量。用于辅助实现NGINX互斥锁,可以获得较高的性能
-
fd: 用于实现文件锁的句柄
-
name: 文件的名称
-
spin: 当不能马上获取到锁时,会采用自旋的方式pause CPU,这里用于控制每一次主动让出CPU之前(通过调用ngx_sched_yield()),进行自旋的次数。
3. 相关函数声明
[参看]
-
nginx源码分析1———进程间的通信机制一(信号量)
-
Nginx的锁的实现以及惊群的避免
-
Nginx源代码分析之锁的实现(十八)
-
Nginx—进程锁的实现
-
linux进程锁
-
进程间同步(进程间互斥锁、文件锁)
-
nginx之共享内存