简单谈谈 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调用Oracle存储过程的方法
Sep 12 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
PHP异步调用socket实现代码
Jan 12 PHP
php重定向的三种方法分享
Feb 22 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
php命令行写shell实例详解
Jul 19 PHP
PHP实现简单注册登录系统
Dec 28 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 spl_autoload_register实现自动加载研究
2011/12/06 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
php封装的page分页类完整实例
2016/10/18 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
原生JS轮播图插件
2017/02/09 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
Vuex提升学习篇
2018/01/11 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
原生JS实现留言板
2020/03/26 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
利用python发送和接收邮件
2016/09/27 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
python打开windows应用程序的实例
2019/06/28 Python
利用Python计算KS的实例详解
2020/03/03 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
委托公证书范本
2014/04/03 职场文书
小学家长通知书评语
2014/12/31 职场文书
简历自荐信范文
2015/03/09 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS