Nginx 源码完全剖析(11)ngx_spinlock
- 作者:钟超
- 博客:http://Blog.CSDN.net/Poechant
- 邮箱:zhongchao.ustc#gmail.com (#->@)
- 日期:2012年10月12日
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 是平台相关的,一般都涉及内联汇编

本文深入剖析了 Nginx 中的自旋锁(ngx_spinlock)实现,讲解了在多核CPU环境下如何利用 ngx_cpu_pause() 和 ngx_atomic_cmp_set() 实现锁的获取与释放。通过示例解释了 ngx_spinlock 在不同平台上的具体操作,并介绍了 ngx_atomic_cmp_set 的工作原理,涉及GCC内联汇编。
最低0.47元/天 解锁文章
1438

被折叠的 条评论
为什么被折叠?



