简单谈谈 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 相关文章推荐
打造计数器DIY三步曲(下)
Oct 09 PHP
PHP文件上传原理简单分析
May 29 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
php 判断服务器操作系统的类型
Feb 17 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
php单例模式实现方法分析
Mar 14 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
Jun 13 PHP
浅谈laravel aliases别名的原理
Oct 24 PHP
分享8个Laravel模型时间戳使用技巧小结
Feb 12 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
Laravel实现通过blade模板引擎渲染视图
2019/10/25 PHP
javascript中创建对象的三种常用方法
2010/12/30 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
关于javaScript注册click事件传递参数的不成功问题
2014/07/18 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
微信小程序开发探究
2016/12/27 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
Node.js 实现远程桌面监控的方法步骤
2019/07/02 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Python文件操作方法详解
2020/02/09 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
yy结婚证婚词
2014/01/10 职场文书
中文师范生自荐信
2014/01/30 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
阿里云日志过滤器配置日志服务
2022/04/09 Servers