<?php namespace yii\mutex\unix; use Yii; use yii\base\InvalidConfigException; class Mutex extends \yii\mutex\Mutex { private $_files = array(); public function init() { if (stripos(php_uname('s'), 'win') === 0) { throw new InvalidConfigException(''); } } protected function acquire($name, $timeout = 0) { $file = fopen(Yii::$app->getRuntimePath() . '/mutex.' . md5($name) . '.lock', 'w+'); if ($file === false) { return false; } $waitTime = 0; while (!flock($file, LOCK_EX | LOCK_NB)) { $waitTime++; if ($waitTime > $timeout) { fclose($file); return false; } sleep(1); } $this->_files[$name] = $file; return true; } protected function release($name) { if (!isset($this->_files[$name]) || !flock($this->_files[$name], LOCK_UN)) { return false; } else { fclose($this->_files[$name]); unset($this->_files[$name]); return true; } } protected function getIsAcquired($name) { return false; } public function getIsDistributed() { return false; } }