简单谈谈 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实现Ftp用户的在线管理的代码
Mar 06 PHP
一贴学会PHP 新手入门教程
Aug 03 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
深入解析php之sphinx
May 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
PHP查询快递信息的方法
Mar 07 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
php PDO异常处理详解
Nov 20 PHP
Redis构建分布式锁
Mar 28 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 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
一个域名查询的程序
2006/10/09 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
JavaScript延迟加载
2021/03/09 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
2016/06/29 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
详解python持久化文件读写
2019/04/06 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
巴西购物网站:Estrela10
2018/12/13 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
自我评价正确写法范文
2013/12/10 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
英语演讲开场白
2015/05/29 职场文书
幼儿园六一主持词
2015/06/30 职场文书
中学总务处工作总结
2015/08/12 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Python OpenCV 图像平移的实现示例
2021/06/04 Python
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
Python实现简单的猜单词
2021/06/15 Python