0

我在 PHP 中创建了一个 Mutex 类来尝试解决我遇到的问题,但我不知道如何测试它!下面是我的代码 - 强制发生锁定情况的最佳方法是什么?我已经尝试在 Firefox 的两个单独的选项卡中运行代码,但这几乎就像它只是将请求排队并且永远不会失败,因为它无法获取互斥锁。我是否应该编写一个脚本来触发对我的页面的一些请求并确保其中一个失败?任何建议表示赞赏!

<?php
class MyCompany_EFInterface_Model_System_Mutex extends Mage_Core_Model_Abstract
{                         
  var $lockName = "";
  var $fileName = null;
  var $file = null; 

  public function __construct($lockName) {
    $this->lockName = preg_replace('/[^a-z0-9]/', '', $lockName);
    $this->getFileName();                         
  }

  public function __destruct() {
    $this->releaseLock();
  }

  public function getLock() {                                                                                                                                                                                                                                                         
    return flock($this->file, LOCK_EX);    
  }

  public function releaseLock() {
    $success = flock($this->file, LOCK_UN);
    fclose($this->file);
    return $success;
  }

  public function getFileName() {
    $path = sys_get_temp_dir();
    if ( substr($path,-1) != DIRECTORY_SEPARATOR ) $path.= DIRECTORY_SEPARATOR;
    $this->fileName = $path . $this->lockName . ".lock";

    if ( ! $this->file = fopen($this->fileName, "c") ) {
      throw new Exception("Cannot create temporary lock file.");
    }                                                                                             
  }
}
4

0 回答 0