php 文件锁flock解决并发
2024-08-26 09:16:10
方案一:使用文件锁排它锁
flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获取失败
在获取到锁的时候,先查询,如果查询成功则进行操作,然后释放锁
flock()函数锁定或释放文件 若成功,则返回 true。若失败,则返回 false。
flock($fp,lock,block)
lock
共享锁定(读取) LOCK_SH
独占锁定(写入) LOCK_EX
释放锁定LOCK_UN
block 若设置为true 则当进行锁定时阻挡其他进程
注意:
1.使用共享锁LOCK_SH,如果是读取,不需要等待,但如果是写入,需要等待读取完成。
2.使用独占锁LOCK_EX,无论写入/读取都需要等待。
3.LOCK_UN,无论使用共享/读占锁,使用完后需要解锁。
4.LOCK_NB,当被锁定时,不阻塞,而是提示锁定。
$fp = fopen("lock.txt", "w+");
//文件锁
if (!flock($fp, LOCK_EX)) {
sleep(2);
}
$res_info = Db::table('br_mac')->field('mac_address,id')->where(['is_use' => 0, 'device_id' => $deviceId])->order('id asc')->find();
$res_update = Db::table('br_mac')->where(array('id' => $res_info['id']))->update(array('is_use' => 1));
if ($res_update != false) {
flock($fp, LOCK_UN);//释放锁
}
最新文章
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
- php 使用 极光推送 类
- UIView常见属性设置汇总
- 使用View为Data Source的Form开发要点
- (转)Android网络命令
- PHP网址
- selenium Grid
- 配置SSH免密码验证
- elk 添加节点
- Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
- Linux-高可用Keepalived概念篇
- 如果想让某个块状元素右对齐,脑子里不要就一个float:right,很多时候,margin-left:auto才是最佳的实践
- django信号
- ajax全局事件
- Linux 访问权限
- 牛客练习赛23CD
- springboot 初始化 web 项目 启动报错。。。一直解决不了
- spring cloud实战与思考(一) spring config全局配置方案设计
- linux下使用mingw编译NSIS-3.03
- 制作本地yum源
热门文章
- zookeeper一二三
- Java 函数式接口 lambda
- 学习swift从青铜到王者之swift闭包06
- 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?
- hash_map与unordered_map区别
- office outlook 無法開啟 outlook 視窗
- windows下的两个等待函数
- 【iOS系列】-A server with the specified hostname could not be found.问题解决
- Bean Query 第一个版本号(1.0.0)已公布
- Linux中的mysql.redis