• 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()的时候文件会自动解锁,所以可以省略解锁的代码。

  • 相关阅读:
    vmware linux虚拟机连接ip设置
    java图片转byte转string
    javaScript传递参数,参数变化问题
    path和classpath的区别
    本地jar在打包时打入到项目中去
    使用集合来排序
    Unity 学习笔记2
    Unity 学习笔记
    unity3d 基础知识点
    Unity3D中的多线程及使用多线程
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9708380.html
Copyright © 2020-2023  润新知