私はmutexを作成する必要があるWindows XP SP3とApache 2.2.21を実行するWebサーバーでPHP 5.3.8を使用しています。mutex with PHP 5.3.8
class Mutex
{
private $lock_ = null;
// create a mutex with with a given id. This ID must be system unique.
// [string] id - a unique id
// return - true on success
public function Initialize($id)
{
$this->lock_ = fopen($id, 'a');
return is_resource($this->lock_);
}
// destroy the mutex
public function Destroy()
{
$result = false;
if (is_resource($this->lock_));
{
$result = flock($this->lock_, LOCK_UN);
$result &= fclose($this->lock_);
$this->lock_ = null;
}
return $result;
}
// exclusively lock the resource
// return - true on success
public function Lock()
{
if (is_resource($this->lock_))
return flock($this->lock_, LOCK_EX);
return false;
}
// release the locked resource
// return - true on success
public function Release()
{
if (is_resource($this->lock_))
return flock($this->lock_, LOCK_UN);
return false;
}
}
しかし、私はこのクラスを使用するために行く:私はAcquired 1 Acquired 2
を参照してください
$this->cache_lock_ = new Mutex();
$this->cache_lock_->Initialize("e:\\cache_lock");
if ($this->cache_lock_->Lock())
echo "Acquired 1 ".PHP_EOL;
if ($this->cache_lock_->Lock())
echo "Acquired 2 ".PHP_EOL;
$this->cache_lock_->Release();
$this->cache_lock_->Destroy();
はロックがしたことを示す印刷されたいくつかの研究の後、私はflockコマンド渡って来ていると、このようにそれを実装します私はそれが排他的であると指定しているにもかかわらず、
誰かが私が間違っていることを示唆できますか?理想的には、リソースが利用可能になるまで、2番目のLock()呼び出しをブロックしたいと思います。
おかげで、 PaulH
あなたの 'Destroy'には' if(is_resource($ this-> lock _)); 'があります。セミコロンはないはずです。また、PHP5を使用している場合は、 'Initialize'と' Destroy'の代わりに '__construct'と' __destruct' PHPマジックメソッドを使うことを検討してください。 –