zoukankan      html  css  js  c++  java
  • php 文件锁flock解决并发

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

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

      

  • 相关阅读:
    递归部门
    web攻击几种方法
    β版本apk下载地址及源代码github地址
    软件工程第六组U-Helpβ版使用说明
    软件工程第六组(六扇门)β版本最终答辩博客
    alpha版本展示
    用户Bug修补报告
    任务墙最终版
    个人总结-尹童欣
    个人总结-齐天浩
  • 原文地址:https://www.cnblogs.com/ampl/p/9639240.html
Copyright © 2011-2022 走看看