简单谈谈 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学习笔记之 函数声明(二)
Jun 09 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
php的ajax简单实例
Feb 27 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
PHP缓冲区用法总结
Feb 14 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
php下的原生ajax请求用法实例分析
Feb 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
PHP比你想象的好得多
2014/11/27 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python中实现定制类的特殊方法总结
2014/09/28 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
Python 输入一个数字判断成绩分数等级的方法
2018/11/15 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
拓展培训心得体会
2014/01/04 职场文书
2014年大学生自我评价
2014/01/19 职场文书
社区禁毒工作方案
2014/06/02 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
离婚协议书格式
2015/01/26 职场文书
党员年终个人总结
2015/02/14 职场文书
廉政承诺书2015
2015/04/28 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书