PHP-如何在php中实现进程的lock机制?

WP主题讨论 WP主题讨论 主题:1013 回复:2239

PHP-如何在php中实现进程的lock机制?

想挽留 发布于 2017-04-07 字数 0 浏览 1172 回复 2

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

泛泛之交 2017-09-24 2 楼

是否可以考虑文件锁机制?

我以前用php写了一些小脚本, cmd同时起几个php进程, 就是用的文件锁. 原来的代码找不到了, 大概写一个demo是这样:

<?php
sleep(rand(10, 12));
$fp=fopen('.lock.tmp','w+');
if(flock($fp,LOCK_EX|LOCK_NB)){
echo "locked!";
sleep(100);
} else{
echo 'cannot lock';
}
?>

虐人心 2017-07-08 1 楼

一个相对简单的实现,供参考:

<?php

class PHPLock
{
const PHPLOCK_TIMEOUT = 1200;
static private $pid = null;

static public function lock(){
    $key = self::__getKey();
    self::$pid = time();
    F($key, self::$pid);
    return true;
}

static public function unlock(){
    $key = self::__getKey();
    if(self::$pid){
        F($key, null);
        return true;
    }
    return;
}

static public function islocked(){
    $key = self::__getKey();
    $time = F($key);

    if(!$time){
        return false;
    }elseif(time() - $time &gt;= self::getTimeout()){
        self::unlock();
        return false;
    }else{
        return true;
    }
}

static public function getTimeout(){
    $key = str_replace(self::__getKey(), '_Lock', '_TIMEOUT');
    $expire = C($key) ? C($key) : self::PHPLOCK_TIMEOUT;
    return $expire;
}

static private function __getKey(){
    return (defined('GROUP_NAME') ? GROUP_NAME.'_' : '') . MODULE_NAME . '_' . ACTION_NAME . '_Lock';
}

}
?>