`
bollaxu
  • 浏览: 221011 次
  • 性别: 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
分享到:
评论

相关推荐

    arm 架构 docker运行nginx镜像包

    arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构 docker运行nginx镜像包,arm 架构...

    centos8 nginx1.20.1 与nginx配置文件

    现在,我们可以下载Nginx的源代码包`nginx-1.20.1.tar.gz`。你可以通过wget或者浏览器将文件下载到本地,然后解压: ```bash wget http://nginx.org/download/nginx-1.20.1.tar.gz tar -zxvf nginx-1.20.1.tar.gz cd...

    nginx arm64版本nginx-linux-arrch64.zip

    这个名为"nginx-linux-arm64.zip"的压缩包提供的是专为ARM64架构(也称为AArch64)编译的Nginx版本,适用于基于Linux操作系统的64位ARM处理器设备,如树莓派、某些云服务器或嵌入式系统。无需繁琐的编译过程,只需...

    nginx版本升级步骤

    **Nginx版本升级步骤详解** 在Web服务器领域,Nginx以其高性能、低内存消耗以及高并发处理能力而备受青睐。随着新版本的发布,可能会包含性能优化、安全修复和新特性,因此定期更新Nginx版本是必要的。本文将详细...

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

    **Nginx 1.13.3 版本详解** Nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于网站托管、负载均衡以及应用程序交付等领域。它以其高效、稳定和轻量级的特性著称,尤其在处理静态内容和高并发请求时表现优秀...

    nginx1.16镜像包

    nginx1.16镜像包 使用docker load -i xx.tar 拉取镜像 使用docker images 查看是否成功。 运行容器 docker run --name nginx-test -p 8080:80 -d nginx 参数说明: --name nginx-test:容器名称。 -p 8080:80: ...

    nginx带nginx-http-flv模块windows编译版rtmp

    **Nginx与Nginx-RTMP及Nginx-HTTP-FLV模块** Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,被广泛应用于高并发场景,尤其在处理静态文件、HTTP缓存以及反向代理等方面表现出色。Nginx以其高效的事件驱动...

    nginx-1.24.0.tar

    Nginx 1.24.0 是 Nginx 开源项目发布的一个重要更新版本,该版本在性能优化、功能增强以及安全性提升方面带来了诸多改进。当您下载 Nginx 1.24.0 的压缩包时,您将获得一个包含 Nginx 源代码的压缩文件,通常命名为 ...

    nginx1.26.2版本docker镜像

    版本 1.26.2 是 Nginx 在 2023 年发布的新版本,它通常包含对各种协议的改进、性能优化以及安全问题的修复。 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,...

    nginx 离线安装依赖nginx 离线安装依赖

    在某些情况下,比如没有外网访问权限的内网环境,或者出于安全和稳定性考虑,用户可能需要在没有网络连接的情况下安装Nginx。离线安装Nginx意味着不能通过包管理器直接从互联网下载安装包和依赖,因此需要预先准备好...

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

    ### Nginx 作为 Apache 和 JBoss 的替代方案 #### 背景介绍 随着互联网技术的不断发展,网站流量的增长对服务器性能提出了更高要求。Apache 和 JBoss 是两种广泛使用的 Web 服务器和应用服务器,但在高并发场景下,...

    Nginx-1.23.2.zip

    Nginx是一个高性能的Web服务器和反向代理服务器,它以其高效的并发处理能力、低内存占用和稳定性而闻名。在1.23.2版本中,Nginx继续提供了优化和改进,以满足不断变化的互联网需求。这个版本可能是对之前版本的bug...

    nginx依赖包资源下载

    在探讨nginx依赖包资源下载的背景之下,我们首先要了解nginx是什么。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由于其高性能、稳定性、丰富的功能集以及简单的配置方式,...

    在linux系统上升级nginx版本

    在 Linux 系统上升级 Nginx 版本 Nginx 是一个流行的开源 Web 服务器软件,可以运行在多种操作系统上,其中包括 Linux。随着 Nginx 的不断更新和发展,升级 Nginx 版本成为一个不可避免的问题。本文将指导您在 ...

    实战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课件完整版.pdf

    Nginx课件完整版.pdf Nginx是一款功能强大的网络服务器软件,能够提供高性能的Web服务器、反向代理、负载均衡等功能。本资源摘要信息将对Nginx的主要知识点进行详细的介绍。 什么是Nginx? Nginx是一个基于C语言...

    Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置(源码)

    Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置。它提供实时服务器统计数据、ChatGPT 助手、一键部署、Let's Encrypt 证书的自动续签以及用户友好的网站配置编辑工具。此外,Nginx ...

    Linux离线安装nginx安装包

    在Linux系统中,离线安装Nginx是一个常见的需求,特别是在没有互联网连接或者网络环境受限的服务器上。本文将详细讲解如何通过离线方式在Linux上安装Nginx,同时也会涉及Nginx依赖的软件如openssl和gcc的安装过程。 ...

    nginx-1.27.1 for windows

    由俄罗斯人Igor Sysoev所开发,其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx已经在多数安装了PHP的应用中代替了Apache服务器,而由于其易于配置,轻量级,性能...

    添加nginx-http-flv-module模块并重新编译后的nginx(windows版)

    在IT行业中,Nginx是一款广泛应用的高性能Web服务器和反向代理服务器,它以其轻量级、高并发处理能力和稳定性而著称。本资源提供的是一款针对Windows平台的Nginx,其中已经集成了`nginx-http-flv-module`模块,这个...

Global site tag (gtag.js) - Google Analytics