自旋锁 -- 4




200x200


概述上一篇日志中,我们介绍了 java 的内存模型和 volatile 关键字实现java 内存模型与 volatile 的实现 我们提到,volat

#技术帖    #技术分享    #线程    #thread   
nginx 的互斥锁nginx 自己实现了互斥锁,这样做的目的主要是为了兼容性,在不支持锁甚至不支持原子操作的环境下实现锁操作 nginx 锁结构ngx_accept_mutex 是一个 ngx_shmtx_t 结构体,ngx_shmtx_t 描述了 nginx 的锁结构// struct ngx_shmtx_t // nginx 锁结构 {{{ typedef struct { #if (NGX_HAVE_ATOMIC_OPS) // 是否支持原子操作 ngx_atomic_t *lock; #if (NGX_HAVE_POSIX_SEM) // 是否支持信号量 ngx_atomic_t *wait; ngx_uint_t semaphore; sem_t sem; #endif #else // 不支持原子操作则使用文件操作 ngx_fd_t fd; u_char *name; #endif ngx_uint_t spin; // 自旋锁标识 } ngx_shmtx_t; // }}}  nginx 使用这个结构实现了&n
#技术帖    #龙潭书斋    #fcntl    #进程   
概述监听连接数组、复用连接队列、模块配置上下文初始化上篇日志中,我们对 nginx 各模块初始化有了大致的了解,可是在循环中究竟做了什么呢?我们需要仔细观察 ngx_init_cycle 是 nginx 初始化进程中最重要的一个环节,其中对模块配置文件的创建和初始化以及对模块的初始化就是这个初始化函数中最重要的环节了在调用 ngx_init_cycle 前,首先对所有模块进行了编号:// objs/ngx_modules.c // ngx_module_t *ngx_modules[] {{{ // &ngx_core_module, // NGX_CORE_MODULE // &ngx_errlog_module, // NGX_CORE_MODULE // &ngx_conf_module, // NGX_CONF_MODULE // &ngx_events_module, // NGX_CORE_MODULE // &ngx_event_core_module, // NGX_EVENT_MODULE // &ngx_epoll_module,
#技术帖    #龙潭书斋    #nginx    #源码   
问题描述在 src/event/ngx_event.c 中的 ngx_process_events_and_timers 中尝试获取自旋锁// void ngx_process_events_and_timers(ngx_cycle_t *cycle) // 事件驱动函数 {{{ void ngx_process_events_and_timers(ngx_cycle_t *cycle) { ngx_uint_t flags; ngx_msec_t timer, delta; if (ngx_timer_resolution) { timer = NGX_TIMER_INFINITE; flags = 0; } else { // 获取最近超时的时间 timer = ngx_event_find_timer(); flags = NGX_UPDATE_TIME; #if (NGX_THREADS) if (timer == NGX_TIMER_INFINITE || timer > 500) { timer = 500; } #endif } // 判断是否
#技术帖    #技术分享    #遗留问题    #nginx   



京ICP备15018585号