3 * @file src/Util/Lock.php
5 namespace Friendica\Util;
8 * @file src/Util/Lock.php
9 * @brief Functions for preventing parallel execution of functions
12 use Friendica\Core\Config;
13 use Friendica\Util\Lock;
15 require_once 'include/dba.php';
18 * @brief This class contain Functions for preventing parallel execution of functions
23 * @var Lock\ILockDriver;
25 static $driver = null;
27 public static function init()
29 switch(Config::get('system', 'lock_driver', 'default')) {
31 self::$driver = new Lock\MemcacheLockDriver();
34 self::$driver = new Lock\DatabaseLockDriver();
37 self::$driver = new Lock\SemaphoreLockDriver();
40 // Determine what's the best/fastest locking driver (default behavior in Friendica)
41 if (function_exists('sem_get') && version_compare(PHP_VERSION, '5.6.1', '>=')) {
42 self::$driver = new Lock\SemaphoreLockDriver();
43 } elseif (Config::get('system', 'cache_driver', 'database') == 'memcache') {
44 self::$driver = new Lock\MemcacheLockDriver();
46 self::$driver = new Lock\DatabaseLockDriver();
52 * Returns the current cache driver
54 * @return Lock\ILockDriver;
56 private static function getDriver()
58 if (self::$driver === null) {
66 * @brief Acquires a lock for a given name
68 * @param string $key Name of the lock
69 * @param integer $timeout Seconds until we give up
71 * @return boolean Was the lock successful?
73 public static function acquireLock($key, $timeout = 120)
75 return self::getDriver()->acquireLock($key, $timeout);
79 * @brief Releases a lock if it was set by us
81 * @param string $key Name of the lock
84 public static function releaseLock($key)
86 return self::getDriver()->releaseLock($key);
90 * @brief Releases all lock that were set by us
93 public static function releaseAll()
95 self::getDriver()->releaseAll();