使用共享内存的方式。nginx本身很好地封装了共享内存操作的方法。
1、管理共享内存的变量,一般放到全局的配置结构中,或者直接用全局变量。ngx_shm_zone_t指针引用创建的共享内存、ngx_slab_pool_t指针管理共享内存的分配与释放;
2、在读取或初始化配置文件时,调用ngx_shared_memory_add向全局变量内存链表中添加一个共享内存,然后保存到之前创建的ngx_shm_zone_t指针。接着注册共享内存初始化函数;
3、在初始化函数中,将共享内存初始地址转换为ngx_slab_pool_t指针保存到1中的ngx_slab_pool_t指针中。
共享内存的使用:互斥和slab。
函数 | 含义 |
ngx_shmtx_create() | 创建 |
ngx_shmtx_destory() | 销毁 |
ngx_shmtx_trylock() | 尝试加锁(加锁失败直接返回,不等待) |
ngx_shmtx_lock() | 加锁(持续等待,直到加锁成功) |
ngx_shmtx_unlock() | 解锁 |
ngx_shmtx_force_unlock() | 强制解锁(可对其他进程进行解锁) |
ngx_shmtx_wakeup() | 唤醒等待加锁进程(系统支持信号量的情况下可用) |
所有的使用都放在模块里。