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

  • 相关阅读:
    CentOS6+nginx+uwsgi+mysql+django1.6.6+python2.6.6
    CentOS 6.5下安装Python+Django+Nginx+uWSGI
    python学习之旅
    Gitlab安装操作说明书
    快速上手git gitlab协同合作
    在centos6.3用yum安装redis
    CentOS 6.5 下安装 Redis 2.8.7
    Ruby Gems更换淘宝源方法
    Apache 日志分析(一)
    Apache 日志分析(二)
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/9708380.html
Copyright © 2011-2022 走看看