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原子操作,避免衝突。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章