Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/vendor/yiisoft/yii2/mutex/ |
Upload File : |
<?php /** * @link https://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license https://www.yiiframework.com/license/ */ namespace yii\mutex; use yii\base\Component; /** * The Mutex component allows mutual execution of concurrent processes in order to prevent "race conditions". * * This is achieved by using a "lock" mechanism. Each possibly concurrent thread cooperates by acquiring * a lock before accessing the corresponding data. * * Usage example: * * ``` * if ($mutex->acquire($mutexName)) { * // business logic execution * } else { * // execution is blocked! * } * ``` * * This is a base class, which should be extended in order to implement the actual lock mechanism. * * @author resurtm <resurtm@gmail.com> * @since 2.0 */ abstract class Mutex extends Component { /** * @var bool whether all locks acquired in this process (i.e. local locks) must be released automatically * before finishing script execution. Defaults to true. Setting this property to true means that all locks * acquired in this process must be released (regardless of errors or exceptions). */ public $autoRelease = true; /** * @var string[] names of the locks acquired by the current PHP process. */ private $_locks = []; /** * Initializes the Mutex component. */ public function init() { if ($this->autoRelease) { $locks = &$this->_locks; register_shutdown_function(function () use (&$locks) { foreach ($locks as $lock) { $this->release($lock); } }); } } /** * Acquires a lock by name. * @param string $name of the lock to be acquired. Must be unique. * @param int $timeout time (in seconds) to wait for lock to be released. Defaults to zero meaning that method will return * false immediately in case lock was already acquired. * @return bool lock acquiring result. */ public function acquire($name, $timeout = 0) { if (!in_array($name, $this->_locks, true) && $this->acquireLock($name, $timeout)) { $this->_locks[] = $name; return true; } return false; } /** * Releases acquired lock. This method will return false in case the lock was not found. * @param string $name of the lock to be released. This lock must already exist. * @return bool lock release result: false in case named lock was not found.. */ public function release($name) { if ($this->releaseLock($name)) { $index = array_search($name, $this->_locks); if ($index !== false) { unset($this->_locks[$index]); } return true; } return false; } /** * Checks if a lock is acquired by the current process. * Note that it returns false if the mutex is acquired in another process. * * @param string $name of the lock to check. * @return bool Returns true if currently acquired. * @since 2.0.36 */ public function isAcquired($name) { return in_array($name, $this->_locks, true); } /** * This method should be extended by a concrete Mutex implementations. Acquires lock by name. * @param string $name of the lock to be acquired. * @param int $timeout time (in seconds) to wait for the lock to be released. * @return bool acquiring result. */ abstract protected function acquireLock($name, $timeout = 0); /** * This method should be extended by a concrete Mutex implementations. Releases lock by given name. * @param string $name of the lock to be released. * @return bool release result. */ abstract protected function releaseLock($name); }