zoukankan      html  css  js  c++  java
  • PHP 利用文件锁处理高并发

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

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

      file:已经打开的文件

      lock:锁的类型

        LOCK_SH:共享锁(读锁)

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

        LOCK_UN:解锁

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

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

      下面是一个demo:

    class Order{
     
        /**
         * 阻塞模式(后面的进程会一直等待前面的进程执行完毕)
         */
        public function createOrder1(){
            $file = fopen(__DIR__.'/lock.txt','w+');
            //加锁
            if(flock($file,LOCK_EX)){
                //TODO 执行业务代码
                flock($file,LOCK_UN);//解锁
            }
            //关闭文件
            fclose($file);
        }
     
        /**
         * 非阻塞模式(只要当前文件有锁存在,那么直接返回)
         */
        public function createOrder2(){
            $file = fopen(__DIR__.'/lock.txt','w+');
            //加锁
            if(flock($file,LOCK_EX|LOCK_NB)){
                //TODO 执行业务代码
                flock($file,LOCK_UN);//解锁
            }else{
                //TODO 执行业务代码 返回系统繁忙等错误提示
            }
            //关闭文件
            fclose($file);
        }
    }

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

  • 相关阅读:
    Http系列目录
    C# 锁系列目录
    RabbitMQ系列目录
    Zookeeper系列目录
    Spring Boot系列目录
    SOAP系列目录
    DynamicProxy系列目录
    网络通信系列目录
    分析windows .net程序dump文件的两种方式
    Code Review Checklist
  • 原文地址:https://www.cnblogs.com/lixihuan/p/14015082.html
Copyright © 2011-2022 走看看