`
bollaxu
  • 浏览: 216992 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx spinlock互斥锁

阅读更多

在nginx里面,定义了一个spinlock,来同步父子进程间的共享内存操作

 

 

#define ngx_shmtx_lock(mtx) ngx_spinlock((mtx)->lock, ngx_pid, 1024)

 

 

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 ( ;; ) {
		//__sync_bool_compare_and_swap(lock, old, set)
		//这是原子操作
		//尝试把lock的值设置成value,如果不为0就说明已经有其他进程获取了该锁
		if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
			//获取锁成功
			return;
		}

		if (ngx_ncpu > 1) {
			//spin=1024,每次shift一位
			for (n = 1; n < spin; n <<= 1) {
				//n=1,2,4,8,16,32,64,128 ...
				//每次等待时间增加一倍
				for (i = 0; i < n; i++) {
					//__asm__(".byte 0xf3, 0x90")
					//__asm__("pause")
					//等待一段时间
					ngx_cpu_pause();
				}
				//等待一段时间再去尝试获取锁
				if (*lock == 0 && ngx_atomic_cmp_set(lock, 0, value)) {
					//获取锁成功
					return;
				}
			}
		}
		//试了这么多次,还是没有获取锁,那就休息一下吧
		//sched_yield()
		//usleep(1)
		ngx_sched_yield();
	}
#else
#if (NGX_THREADS)
#error ngx_spinlock() or ngx_atomic_cmp_set() are not defined !
#endif
#endif
}
1
0
分享到:
评论

相关推荐

    nginx 离线安装包nginx 离线安装包

    nginx 离线安装包nginx 离线安装包

    nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源

    nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源nginx镜像资源

    一分钟搞定 Nginx反向代理 nginx域名代理

    3.找到D:\nginx\conf下nginx.conf文件用记事本打开 在文段末尾大括号前加上 include proxy.conf;(就是加载刚刚新建的那个文件(注意路径)) 4.进入cmd 进入D盘: d: 进到nginx文件夹下:cd nginx 启动nginx.exe:...

    Nginx 1.22.0 Linux 版本,解压安装。

    Nginx 1.22.0 Linux 版本,解压安装。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型...

    nginx替代方案,nginx代替apache与jboss

    nginx替代apache,nginx替代方案,nginx代替apache与jbos,nginx+jboss结合

    nginx-1.13.3,nginx1.13.3不存在信息泄漏漏洞安全稳定nginx版本

    亲测好用.nginx-1.13.3,nginx1.13.3不存在信息泄漏漏洞安全稳定nginx版本,不存在漏洞 nginx-1.13.3 nginx1.13.3 安全稳定 nginx版本

    Nginx中accept锁的机制与实现详解

    nginx采用多进程的模,当一个请求过来的时候,系统会对进程进行加锁操作,保证只有一个进程来接受请求。 本文基于Nginx 0.8.55源代码,并基于epoll机制分析 1. accept锁的实现 1.1 accpet锁是个什么东西 提到accept...

    Nginx安装包Nginx安装包

    Nginx安装包Nginx安装包

    Nginx 全能HTTP+Web 指南 完整版pdf

    Nginx全能指南是一本介绍Nginx服务器的书,首先,简要介绍Nginx的基本概念和作用,如反向代理、负载均衡等。然后,列举Nginx的优点,如高性能、可扩展性、稳定性等。接着,介绍如何安装和配置Nginx,并提供一些实用...

    centos8 nginx1.20.1 与nginx配置文件

    nginx.conf nginx-1.20.1.tar.gz 这是关于centos8的nginx 和nginx 的配置https文件

    nginx-upstream-jvm-route 和 nginx 对应版本,亲测可用

    此资源有两个文件,含 nginx-upstream-jvm-route 和 nginx 对应版本,都是tar.gz文件。 安装方法网上很多就不写了,亲测可用。 不用担心版本不匹配造成安装失败,再浪费积分去到处下载尝试的烦恼。 此资源有两个文件...

    nginx安装环境及nginx_1.18.0安装包

    nginx安装环境及nginx_1.18.0安装包,gcc、g++、pcre、zlib、nginx包

    nginx-1.23.1.zip

    nginx/Windows-1.23.1 Nginx(发音为“engine X”[9] /ˌɛndʒɪnˈɛks/ EN-jin-EKS),风格化为NGIИX,是一个Web服务器,也可以用作反向代理,负载平衡器,邮件代理和HTTP缓存。该软件由Igor Sysoev创建,并于...

    Nginx服务器的安装与配置.pdf

    Nginx官网配置.pdf Nginx基本配置.pdf Nginx模块.pdf Nginx指南.pdf 第1章 Nginx简介.pdf 第2章 Nginx服务器的安装与配置.pdf 第3章 Nginx的基本配置与优化.pdf 第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf 第...

    nginxdocker镜像(nginx-upstream-check健康检查)

    官方nginx 镜像不带主动健康,本镜像将 nginx_upstream_check健康检查 打包到了镜像中。

    nginx命令参数用法详细介绍

    nginx命令参数用法详细介绍 nginx命令:启动nginx  在Windows上安装好nginx后,我们需要启动nginx服务,启动nginx服务的命令行操作主要有两种方式,即 C:/nginx-0.8.53&gt;nginx.exe  或者 C:/nginx-0.8.53&gt;start ...

    nginx1.21.5 nginx.conf配置文件

    nginx1.21.5 nginx.conf配置文件

    实战nginx.pdf

    实战nginx.pdf。主要内容包括:第1章 Nginx简介;第2章Nginx服务器安装与配置;第3章Nginx基本配置与优化;第4章Nginx与PHP;第5章Nginx与JSP、ASP.NET..第6章Nginx http负载均衡和反向代理;第7章Nginx 的rewrite...

    深入理解Nginx

    书中首先通过介绍官方Nginx的基本用法和配置规则,帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识...

Global site tag (gtag.js) - Google Analytics