PHP用文件鎖模擬進程鎖,實現原子操作
|
瀏覽:353
|
更新:
2014-06-26 17:31
筆者碰到一個問題:用PHP實現原子操作,而PHP本身並沒有提供進程鎖機制?那麼如何用PHP實現原子操作呢,幸好PHP有文件鎖機制,下面筆者就介紹下如何通過文件鎖模擬進程鎖實現原子操作。
原子操作的代碼之前,使用排他鎖打開某個文件,代碼如下:
$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 );
整體僞代碼爲:
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 );
以上便可實現PHP原子操作,避免衝突。