mysql锁定时的分叉进程

时间:2012-09-28 18:45:51

标签: php mysql cakephp

我正在使用cakephp中的shell脚本来处理mysql数据库中的项目队列。为了加快这个过程,我正在使用pcntlfork:

$pids = array();
$i = 0;
for($i = 0; $i < count($queue); $i++) 
{

     $pids[$i] = pcntl_fork();

      if(!$pids[$i]) {
        # do code
        exit();
      } 
    }

在执行此代码时,shell脚本可能会在当前脚本有时间从队列中删除项目之前运行。我正在使用mysql并像这样锁定表:

$this->Queue->query("SELECT GET_LOCK('".$this->mysqlLock."', ".$this->mysqlLockTime.") AS 'GetLock'");

这个实现不起作用给我错误&#34;一般错误:mysql服务器已经消失了#34;。这是因为孩子们的连接丢失了。它似乎是php中fork本身的一个缺陷。

我的问题是有一个更好的解决方案来锁定这个进程,直到它完成然后释放它以便其他shell脚本执行?

1 个答案:

答案 0 :(得分:1)

我找到了最好的解决方案,以确保程序不会调用并执行自己的实例。我将在php中使用信号量来锁定程序。

这是一个关于信号量的简短教程: http://www.re-cycledair.com/php-dark-arts-semaphores