资讯专栏INFORMATION COLUMN

PHP 利用文件锁处理高并发

calx / 3712人阅读

利用flock()函数对文件进行加锁(排它锁),实现并发按序进行。

flock(file,lock,block)有三个参数。

file : 已经打开的文件

lock : 锁的类型

LOCK_SH : 共享锁定(读锁)

LOCK_EX : 独占锁定(排它锁,写锁)

LOCK_UN : 解锁

LOCK_NB : 如果希望在文件锁定时阻塞进程,那么需要加上该参数

block : 设置为true的时候,锁定文件时,会阻止其他进程

下面是一个简单demo
    /**
     *  阻塞模式(后面的进程会一直等待前面的进程执行完毕)
     */
    public function crateOrder()
    {
        $file = fopen(__DIR__."/lock.txt","w+");
        //加锁
        if(flock($file,LOCK_EX))
        {
            //TODO 执行业务代码
            flock($file,LOCK_UN);//解锁
        }
        //关闭文件
        fclose($file);
    }

      /**
     *  非阻塞模式(只要当前文件有锁存在,那么直接返回)
     */
    public function crateOrder()
    {
        $file = fopen(__DIR__."/lock.txt","w+");
        //加锁
        if(flock($file,LOCK_EX|LOCK_NB))
        {
            //TODO 执行业务代码
            flock($file,LOCK_UN);//解锁
        }
        else
        {
            //TODO 执行业务代码 返回系统繁忙等错误提示

        }
        //关闭文件
        fclose($file);

    }
小提示:在执行fclose()的时候文件也会自动解锁,所以可以省略解锁的代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29371.html

相关文章

  • PHP利用Mysql解决并发

    摘要:前面写过利用文件锁来处理高并发的问题的,现在我们说另外一个处理方式,利用的锁来解决高并发的问题先看没有利用事务的时候并发的后果创建库存管理表创建订单管理表测试代码我们预置库存是十个,然后执行测试查看结果 前面写过利用文件锁来处理高并发的问题的,现在我们说另外一个处理方式,利用Mysql的锁来解决高并发的问题 先看没有利用事务的时候并发的后果 创建库存管理表 CREATE TABLE `...

    Coly 评论0 收藏0
  • Mysql的机制与PHP文件处理并发简单思路

    摘要:以购买商品举例从数据库获取库存的数量。这里暂时就不测试了,下面会针对并发的处理给出测试结果。第二种方案,使用的文件锁。特点当调用锁一个文件时,如果没有获取锁,直接返回,不会出现阻塞。的表锁和的文件锁在应对并发数量上也有差别,自己可以多测试。 以购买商品举例: ① 从数据库获取库存的数量。② 检查一下库存的数量是否充足。③ 库存的数量减去买家购买的数量(以每个用户购买一个为例)。④ 最后...

    sunsmell 评论0 收藏0
  • PHP面试题

    摘要:质量高在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。代码块捕获异常,并创建一个包含异常信息的对象。这样可以解决超卖的问题,但是会导致文件得开销很大。 6.你们公司是使用什么框架? 答:我们公司采用的是TP框架,运用的mysql+apache+php进行开发,因为TP框架是一个免费开源的,轻量级的php开发框架,而且是我们中国人自己开发的,...

    ls0609 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<