php文件加锁 lock_sh ,lock_ex
文件的锁一般这么使用:
$fp = fopen("filename", "a");
flock($fp, LOCK_SH) or die("lock error")
$str = fread($fp, 1024);
flock($fp, LOCK_UN);
fclose($fp);
注意fwrite之后,文件立即就被更新了,而不是等fwrite然后fclose之后文件才会更新,这个可以通过在fwrite之后fclose之前读取这个文件进行检查
但是什么时候使用lock_ex什么时候使用lock_sh呢?
读的时候:
如果不想出现dirty数据,那么最好使用lock_sh共享锁。可以考虑以下三种情况:
1. 如果读的时候没有加共享锁,那么其他程序要写的话(不管这个写是加锁还是不加锁)都会立即写成功。如果正好读了一半,然后被其他程序给写了,那么读的后一半就有可能跟前一半对不上(前一半是修改前的,后一半是修改后的)
2. 如果读的时候加上了共享锁(因为只是读,没有必要使用排他锁),这个时候,其他程序开始写,这个写程序没有使用锁,那么写程序会直接修改这个文件,也会导致前面一样的问题
3. 最理想的情况是,读的时候加锁(lock_sh),写的时候也进行加锁(lock_ex),这样写程序会等着读程序完成之后才进行操作,而不会出现贸然操作的情况
写的时候:
如果多个写程序不加锁同时对文件进行操作,那么最后的数据有可能一部分是a程序写的,一部分是b程序写的
如果写的时候加锁了,这个时候有其他的程序来读,那么他会读到什么东西呢?
1. 如果读程序没有申请共享锁,那么他会读到dirty的数据。比如写程序要写a,b,c三部分,写完a,这时候读读到的是a,继续写b,这时候读读到的是ab,然后写c,这时候读到的是abc.
2. 如果读程序在之前申请了共享锁,那么读程序会等写程序将abc写完并释放锁之后才进行读。
转载于:https://www.cnblogs.com/yangf2016/p/5865632.html
php文件加锁 lock_sh ,lock_ex相关推荐
- php lock sh,php文件加锁 lock_sh ,lock_ex
参考网站:http://hi.baidu.com/honly1215/item/8d27a66d11689c3aac3e83fe 文件锁有两种:共享锁和排他锁,也就是读锁(LOCK_SH)和写锁(LO ...
- python 中给文件加锁——fcntl模块
如果没有fcntl模块则用 sudo pip install fcntl安装 模块简单说明: 打开文件,不存在则创建之 f = open('./test','w') fcntl.flock(f,fcn ...
- python os 文件锁_python 中给文件加锁——fcntl模块
如果没有fcntl模块则用 sudo pip install fcntl安装 模块简单说明: 打开文件,不存在则创建之 f = open('./test','w') fcntl.flock(f,fcn ...
- python 加锁_python之给文件加锁(fcntl模块)
对该文件加密:fcntl.flock(f,fcntl.LOCK_EX) 这样就对文件test加锁了,如果有其他进程对test文件加锁,则不能成功,会被阻塞,但不会退出程序. 解锁:fcntl.floc ...
- python文件加锁
首先要引入库 import fcntl 打开一个文件 f = open('./test') 对该文件加密: fcntl.flock(f, fcntl.LOCK_EX) 这样就对文件test加锁了,如果 ...
- SVN ---文件加锁,执行clean up命令
一.SVN 中 clean up 的功能 当Subversion改变你的工作拷贝(或是.svn中的任何信息),它会尽可能的小心,在修改任何事情之前,它把意图写到日志文件中去,然后执行log文件中的命令 ...
- 多线程并发思考--文件加锁
多线程并发思考--文件加锁 在最近的工作中,经常要用到线程,就对线程相关知识稍微看了看,知道并发线程经常引起共享资源冲突,java以提供关键字synchronized的形式,为防止资源冲突提供了内置支 ...
- C Linux 文件加锁 lock fcntl
Linux系统中,文件上锁的函数有两个Lock和fcntl ,前者主要是加建议性锁,后者既可以加建议性锁(默认)也可以加强制性锁,而且她还可以给某一记录进行上锁,即所谓的记录锁. fcntl文件锁有两 ...
- linux目录加了一把锁怎么办,linux 文件加锁 lockf 小结
项目中涉及数据的读取和发送,由于对线程不熟悉,我将读取和发送分成了两个独立的程序,先实现功能再更新为多线程版本.但两个程序共用一个文件时同样会出现同步问题.所以必须加锁. 这次选择的是lockf.在实 ...
- java中文件加锁机制
当同时对一个文件进行操作的时候,很可能出现错误甚至锁坏文件. 在某些情况下,有一个应用的两个实例同事操作一个文件,第一个实例应该锁定这个文件,第二个实例发现这个文件被锁定,是等待它解锁还是跳过文件操作 ...
最新文章
- libtorchWindows中的使用
- dockerfile cd目录_使用Werf和现有的Dockerfiles改善你的CI/CD体验
- 基于RobotFramework实现自动化测试
- Windows音频编程:Win32 Wave API 的使用
- APP测试之Monkey压力测试(二)
- Yearn正在评估恢复yDAI池的方式
- 科技公司钟爱的50款开源工具
- WinForm中的特殊窗体效果:渐变窗口和信息提示窗口
- 《机器人爱好者(第3辑)》——D机器人引领自动驾驶汽车之路
- php毕设周记_毕设周记(一)
- java 进程通信代码
- Struts2 基础入门
- Python爬虫 抓取拉勾招聘信息
- android中图片压缩上传方法之Luban库
- 数量积与向量积(点积与叉积)
- 恒指赵鑫:来说说止损
- Python中strip函数几种用法
- 深度学习目标检测——AP以及MAP
- 服务器显示post是什么意思,post请求 post请求是什么
- 梦想与行动:仰望星空,脚踏实地
热门文章
- Yii 2.0 权威指南(1) 第一次问候
- 简单搭建es6编译环境
- TCP新手误区–心跳的意义
- SpringCloud实战(四)Sentinel自定义降级异常实战
- 大学使用python 编辑器_Python数据分析|最多人用的代码编辑器推荐
- vue 动画 抖动效果_css开发常用动画
- java基础知识总结(经典)_Java基础知识总结(超级经典)(三)
- mysql数据库维护重要性_建立MySQL数据库日常维护规范
- status函数(自学数据结构第一天)
- ubuntu16.04下编译安装Autoware