PHP防止代码在高并发下同时运行两次

时间:2018-10-30 16:46:49

标签: php

通过浏览器只有1个脚本的第一种方法(完美运行)

$monitor_pid = "/tmp/a.lock";


$fp = fopen( $monitor_pid, 'a+' );
if ( flock( $fp, LOCK_EX | LOCK_NB ) )
{
    $pid = intval( trim( fgets( $fp ) ) );



    //RUN CODE ONCE AT A TIME


    fflush( $fp );
    flock( $fp, LOCK_UN );
}
else
{
    exit;
}

fclose( $fp );

第二个带有shell_exec的方法,该方法调用另一个脚本(不起作用)

<?php
 shell_exec("php test.php");
?>

和test.php

$monitor_pid = "/tmp/a.lock";


$fp = fopen( $monitor_pid, 'a+' );
if ( flock( $fp, LOCK_EX | LOCK_NB ) )
{
    $pid = intval( trim( fgets( $fp ) ) );



    //RUN CODE ONCE AT A TIME


    fflush( $fp );
    flock( $fp, LOCK_UN );
}
else
{
    exit;
}

fclose( $fp );

好像在第二种方法中一样,该过程并不关心我的锁。 为什么会这样呢? 还有其他选择吗?

谢谢

0 个答案:

没有答案