源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

模拟flock实现文件锁定

  • 时间:2022-01-25 17:55 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:模拟flock实现文件锁定
主要提供了一种思路。   $lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。   其实最关键就是有个标识符来表示当前这个文件的状态, $lock0和$lock1就是起这样的作用。
[u]复制代码[/u] 代码如下:
<?php   // Lock a file, timing out if it takes too long.   function lock ($lock, $tries) {          $lock0 = ".{$lock}0";          $lock1 = ".{$lock}1";          for ($i=0; $i<$tries; $i++) {                  if (!is_file($lock0)) {                          touch($lock0);                          if (!is_file($lock1)) {                                  touch($lock1);                                  return 1;                          }                  }                  usleep(100);          }          return 0;   }   // Unlock a file.   function unlock ($lock) {          unlink(".{$lock}1");          unlink(".{$lock}0");   }   // Usage example.   $filename = "somefile";   $data = "stuff and thingsn";   $tries = 10;   if (lock($filename, $tries)) {          $h = fopen($filename, "a") or die();          fwrite($h, $data);          fclose($h);          /**            * 另外一个进程写文件,检查是否锁定          */          if (lock($filename, $tries)) {                  $h2 = fopen($filename, "a") or die();                  fwrite($h2,'check lock');                  fclose($h2);           }else{               //die("Failed to lock $filename after ".($tries*100)." milliseconds!";           }           unlock($filename);   } else {          //die("Failed to lock $filename after ".($tries*100)." milliseconds!";   }   ?> 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部