zoukankan      html  css  js  c++  java
  • 文件锁的玩法

      群里大家一起交流:410028331 

    文件锁的玩法


    1、普通两个文件同一时候往一个文件里写入内容效果

    index-1.php

    <?php
    $file = 'temp.txt';
    $fp = fopen($file,'a');

     
    for($i = 0;$i <10;$i++)
    {
    fwrite($fp, "11111111<br />");
    sleep(1);
    }
     
    fclose($fp); 

    ?

    >


    index-2.php

    <?php


    $file = 'temp.txt';
    $fp = fopen($file,'a'); 
     
    for($i = 0;$i <10;$i++)
    {
    fwrite($fp, "22222222<br />");

    fclose($fp); 

    ?>

    当同一时候运行后,(先1后2   要快立即运行两个)

    进入temp.txt  会看到     11111111<br />11111111<br />22222222<br />22222222<br />22222222<br />22222222<br />22222222<br />11111111<br />11111111<br />11111111<br />

    是混乱的。那么实际实现功能上就会出现故障。


    ?????????

    那么这样的情况下。怎样实现并发对一个文件写入,而先来先写排序写入呢?

    那么用到文件锁,这是一个非常好地选择

    index-1.php改为

    <?

    php
    $file = 'temp.txt';
    $fp = fopen($file,'a');


    if(flock($fp,LOCK_EX))
    {
    for($i = 0;$i <10;$i++)
    {
    fwrite($fp, "11111111<br />");
    sleep(1);
    }
    flock($fp,LOCK_UN);
    }
    fclose($fp); 


    index-2.php改为:

    <?php


    $file = 'temp.txt';
    $fp = fopen($file,'a');


    if(flock($fp,LOCK_EX))
    {
    for($i = 0;$i <10;$i++)
    {
    fwrite($fp, "22222222<br />");
    }
    flock($fp,LOCK_UN);
    }


    fclose($fp); 


    再去运行发现temp.txt中的结果是这种(先1立即2,由于1有sleep会运行一段时间,仅仅要能保证1未完就运行了2就可以)  

    结果:   11111111<br />11111111<br /> ...   22222222<br />...

    也就是1运行完了后运行的2

  • 相关阅读:
    5)二叉树[1]二叉树的遍历(先序、中序、后序)
    4)线性表[顺序表和链表]
    3)链栈和链队列
    2)队列
    1)栈
    Const #define
    7)查找[2]二叉排序树以及查找
    ZooKeeper 安装与配置
    Hadoop 2.7.4 + HBase 1.2.6 + ZooKeeper 3.4.10 配置
    Hadoop的配置文件设置(非HDFS HA)
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7242191.html
Copyright © 2011-2022 走看看