PHP 锁机制

news/2024/12/30 15:13:18

应用环境

解决高并发,库存为负数的情况

阻塞模式

如果其他进程已经加锁文件,当前进程会一直等其他进程解锁文件后继续执行

flock($fp, LOCK_EX) // 文件锁

非阻塞模式

如果其他进程已经加锁文件,当前进程不会等其他进程解锁文件,直接返> 回,也就是直接忽略加锁的代码到关闭文件那块

flock($fp,LOCK_EX | LOCK_NB) // 文件锁

代码

flock($fp, LOCK_EX)flock($fp,LOCK_EX | LOCK_NB) 换一下就行,其他都一样

<?php
$fp = fopen('lock.txt', 'r');
if( flock($fp, LOCK_EX) ){      // flock($fp,LOCK_EX | LOCK_NB)$info = D()->query('SELECT surplus_total_num FROM tb_product WHERE id=1 LIMIT 1');if( $info['surplus_total_num'] > 0 ){D()->execute('UPDATE tb_product SET surplus_total_num = surplus_total_num - 1  WHERE id=1');$isSurplusProduct = 1;}else{$isSurplusProduct = 0;}flock($fp, LOCK_UN);
}
fclose($fp);if( !$isSurplusProduct ) exit('已经没有产品了');

并发测试

查看数据库的库存是否一致保持为0 ab参数:-c:并发数;-n:总请求数

ab -c 20 -n 1000 http://www.test.com/test.php

参考文档

https://www.gaojiufeng.cn/?id=97
https://www.jb51.net/article/...
http://www.cnblogs.com/scotom...

备注

网上还有eaccelerator方式使用,还是file更通用

文章来源:https://blog.csdn.net/weixin_33785108/article/details/88769778
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-3125960.html

相关文章

IOM计算机组成原理,计算机组成原理实验__实验报告

《计算机组成原理实验__实验报告》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机组成原理实验__实验报告(9页珍藏版)》请在人人文库网上搜索。1、计算机组成原理学生实验报告学 院&#xff1a;基 础 学 院 专 业&#xff1a;信息管理 年 级&#xff1a; 2012 …

Json/Xml简介和处理模型

JSON json简介 JSON是一种基于文本的数据交换格式&#xff0c;源自JavaScript&#xff0c;用于Web服务和其他连接的应用程序。以下部分介绍了JSON语法&#xff0c;JSON使用概述以及生成和解析JSON的最常用方法的说明。 JSON语法 JSON只定义了两个数据结构&#xff1a;对象和数组…

python3学习日志 多线程编程

2019独角兽企业重金招聘Python工程师标准>>> 1.简介 转载于:https://my.oschina.net/u/3285199/blog/1865914

Struts2,大爷你好!第三天

day036.struts2 拦截器 是在访问某个Action或Action的某个方法&#xff0c;字段之前或之后实施拦截&#xff0c;并且Struts拦截器是可插拔的&#xff0c; 拦截器是AOP(面向切面)的一种实现。优点&#xff1a;调用功能的封装&#xff0c;提供了可重用性&#xff1b;xml文…

试题威胜中国芯计算机比赛,第26届中国儿童青少年威盛中国芯HTC计算机表演赛成果汇报及颁奖...

第26届计算机表演赛全体选手大合影人民网北京8月8日电(记者孟哲)昨日&#xff0c;第26届中国儿童青少年威盛中国芯HTC计算机表演赛(以下简称“表演赛”)成果汇报及颁奖在北京落下帷幕。表演赛始终以信息技术普及教育为宗旨&#xff0c;顺应信息化社会的发展潮流&#xff0c;为青…

BZOJ.4942.[NOI2017]整数(分块)

BZOJ洛谷UOJ 可能是退役之前最后一个BZOJ rank1了&#xff1f; 参考这里。 如果没有减法&#xff0c;对一个二进制数暴力进位&#xff0c;均摊复杂度是\(O(1)\)的&#xff08;要进\(O(n)\)次位就至少需要\(O(n)\)次操作&#xff09;。 但是这题有减法...显然暴力进位就不对了。…

计算机考研人工智能方向学校排名,自动化考研方向以及学校排名

自动化考研方向以及学校排名:个二级学科课程设置&#xff1a;1、控制理论与控制工程课程设置矩阵论&#xff0c;泛函分析&#xff0c;线性系统理论&#xff0c;优化理论与最优控制&#xff0c;非线性控制系统理论&#xff0c;智能控制&#xff0c;自适应控制&#xff0c;鲁棒控…

使用Formik轻松开发更高质量的React表单(二)使用指南

一个基本的例子 设想你要开发一个可以编辑用户数据的表单。不过&#xff0c;你的用户API端使用了具有类似下面的嵌套对象表达&#xff1a; {id: string,email: string,social: {facebook: string,twitter: string,// ...} } 最后&#xff0c;我们想使开发的对话框表单能够接收下…

电子计算机入门教程,「冯修远」计算机入门0基础教程:Word文档的基本操作

冯修远&#xff1a;Word文档的基本操作人生就像一场修行&#xff0c;任重而道远。大家好&#xff0c;我是冯修远&#xff0c;一位专注于IT教育行业及编程技术和网络营销的人士。通过对《「冯修远」计算机入门0基础教程&#xff1a;office的安装》的学习&#xff0c;大家应该都应…

[Swift]LaunchScreen.storyboard如何跳转到到Main.storyboard

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/ &#xff09;➤GitHub地址&…