• 文件锁的玩法


      群里大家一起交流: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

  • 相关阅读:
    IO模型
    协程
    线程
    进程总结
    HashMap和Hashtable有什么区别
    HashMap 1.7 与 1.8 的 区别,说明 1.8 做了哪些优化,如何优化的
    GC线程是否为守护线程?
    float f=3.4;是否正确?
    final、finally和finalized的区别?
    Eureka注册中心是什么?
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7242191.html
Copyright © 2020-2023  润新知