方案一:使用文件锁排它锁

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);//释放锁
}

  

最新文章

  1. JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
  2. php 使用 极光推送 类
  3. UIView常见属性设置汇总
  4. 使用View为Data Source的Form开发要点
  5. (转)Android网络命令
  6. PHP网址
  7. selenium Grid
  8. 配置SSH免密码验证
  9. elk 添加节点
  10. Netty4.0.24.Final 版本中 IdleStateHandler 使用时的局限性
  11. Linux-高可用Keepalived概念篇
  12. 如果想让某个块状元素右对齐,脑子里不要就一个float:right,很多时候,margin-left:auto才是最佳的实践
  13. django信号
  14. ajax全局事件
  15. Linux 访问权限
  16. 牛客练习赛23CD
  17. springboot 初始化 web 项目 启动报错。。。一直解决不了
  18. spring cloud实战与思考(一) spring config全局配置方案设计
  19. linux下使用mingw编译NSIS-3.03
  20. 制作本地yum源

热门文章

  1. zookeeper一二三
  2. Java 函数式接口 lambda
  3. 学习swift从青铜到王者之swift闭包06
  4. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?
  5. hash_map与unordered_map区别
  6. office outlook 無法開啟 outlook 視窗
  7. windows下的两个等待函数
  8. 【iOS系列】-A server with the specified hostname could not be found.问题解决
  9. Bean Query 第一个版本号(1.0.0)已公布
  10. Linux中的mysql.redis