简单谈谈 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)
Sep 04 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
解决php表单重复提交实现方法
Sep 29 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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-fpm的两种进程管理模式详解
2013/06/03 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python实现计算倒数的方法
2015/07/11 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
python如何进入交互模式
2020/07/06 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
西班牙在线光学:Visual-Click
2020/06/22 全球购物
工作表扬信的范文
2014/01/10 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
律师催款函范文
2015/06/24 职场文书
Django路由层如何获取正确的url
2021/07/15 Python
MySQL数据库完全卸载的方法
2022/03/03 MySQL
一文搞懂Java中的注解和反射
2022/06/21 Java/Android
关于MySQL中explain工具的使用
2023/05/08 MySQL