問題を解決するために PHP で Mutex クラスを作成しましたが、テスト方法がわかりません。以下は私のコードです-ロックが発生する状況を強制する最良の方法は何ですか? Firefox の 2 つの別々のタブでコードを実行しようとしましたが、ミューテックスを取得できないため、リクエストをキューに入れるだけで失敗することはありません。基本的に、ページへのいくつかのリクエストを起動し、そのうちの 1 つが失敗することを確認するスクリプトを作成する必要がありますか? アドバイスをいただければ幸いです。
<?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.");
}
}
}