PHP用文件锁模拟进程锁

PHP用文件锁模拟进程锁,实现原子操作


  • |

  • 浏览:353

  • |

  • 更新:

    2014-06-26 17:31
  1. 笔者碰到一个问题:用PHP实现原子操作,而PHP本身并没有提供进程锁机制?那么如何用PHP实现原子操作呢,幸好PHP有文件锁机制,下面笔者就介绍下如何通过文件锁模拟进程锁实现原子操作。

  2. 原子操作的代码之前,使用排他锁打开某个文件,代码如下:

    $fp = fopen( LOCK_FILE_PATH, "r" );

    if (!$fp) {    

    echo "Failed to open the lock file!
    ";    

    exit(1);//异常处理

    }

    flock ( $fp, LOCK_EX );

  3. 原子操作的代码之后,对该文件解锁,并关闭文件,代码如下:

    flock ( $fp, LOCK_UN );

    fclose ( $fp );

  4. 整体伪代码为:

    define("LOCK_FILE_PATH", "/tmp/lock");

    if( !file_exists(LOCK_FILE_PATH) ){ 

       $fp = fopen( LOCK_FILE_PATH, "w" );

        fclose ( $fp );

    }

    $fp = fopen( LOCK_FILE_PATH, "r" );

    if (!$fp) {

        echo "Failed to open the lock file!
    ";

        exit(1);//异常处理

    }flock ( $fp, LOCK_EX );

    //此处添加原子操作代码

    flock ( $fp, LOCK_UN );

    fclose ( $fp );

  5. 以上便可实现PHP原子操作,避免冲突。


你可能感兴趣的:(PHP用文件锁模拟进程锁)