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

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

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

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

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

评论(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 >= 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';
}
}
?>