简单谈谈 php 文件锁


Posted in PHP onFebruary 19, 2017

锁机制之所以存在是因为并发导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有序的写入数据,不加锁的情况下会发生什么?多次有序的写入操作相当于一个事务,我们此时需要保证这个事务的完整性。

如果我们有两个程序同时向某个文件中写入数据,为了保证数据的完整性,可以加一个文件锁,先让程序1执行,程序1执行完后,解锁,再让程序2执行。实现代码如下:

$fp = fopen('test.txt',"a");
$count = 10;
if (flock($fp, LOCK_EX)) {
for($i=1;$i<$count;$i++){
fwrite($fp, 'text2_'.$i."rn");
echo "test2".date('h:i:s') . "
";
sleep(1); 
echo "test2".date('h:i:s');
}
flock($fp , LOCK_UN);
}else{
echo "Couldn't lock the file !";
}
fclose($fp);
PHP 相关文章推荐
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 PHP
laravel 实现划分admin和home 模块分组
Oct 15 PHP
PHP new static 和 new self详解
Feb 19 #PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 #PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 #PHP
PHP进程通信基础之信号
Feb 19 #PHP
PHP 信号管理知识整理汇总
Feb 19 #PHP
php 三大特点:封装,继承,多态
Feb 19 #PHP
PHP实现大数(浮点数)取余的方法
Feb 18 #PHP
You might like
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
javascript 学习之旅 (1)
2009/02/05 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
react-router中的属性详解
2017/06/01 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
python链接Oracle数据库的方法
2015/06/28 Python
python绘制直线的方法
2018/06/30 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python如何计算语句执行时间
2019/11/22 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
zooplus波兰:在线宠物店
2019/07/21 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
年度考核自我鉴定
2013/11/09 职场文书
小学英语教学反思
2014/01/30 职场文书
小学生运动会报道稿
2014/09/12 职场文书
任长霞观后感
2015/06/16 职场文书
2015团员个人年度总结
2015/11/24 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS