简单谈谈 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 Session变量不能传送到下一页的解决方法
Nov 27 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 PHP
ThinkPHP中__initialize()和类的构造函数__construct()用法分析
Nov 29 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
CI框架中类的自动加载问题分析
Nov 21 PHP
php中的抽象方法和抽象类
Feb 14 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
浅谈Laravel核心解读之Console内核
Dec 02 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
PHP实现变色验证码实例
2014/01/06 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
2017/11/06 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
vue+element tabs选项卡分页效果
2020/06/29 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python将字符串转换成数组的方法
2015/04/29 Python
python处理大数字的方法
2015/05/27 Python
Python实现的异步代理爬虫及代理池
2017/03/17 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
Python requests模块cookie实例解析
2020/04/14 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
简单英文演讲稿
2014/01/01 职场文书
领导失职检讨书
2014/02/24 职场文书
买房协议书
2014/04/11 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书