1. 程式人生 > 實用技巧 >PHP 利用檔案鎖處理高併發

PHP 利用檔案鎖處理高併發

  利用flock()函式對檔案進行加鎖(排它鎖),實現併發按序進行。

  flock(file,lock,block)有三個引數。

  file:已經開啟的檔案

  lock:鎖的型別

    LOCK_SH:共享鎖(讀鎖)

    LOCK_EX:獨佔鎖定(排它鎖,寫鎖)

    LOCK_UN:解鎖

    LOCK_NB:如果希望在檔案鎖定時阻塞程序,那麼需要加上該引數

  block:設定為true的時候,鎖定檔案時,會阻止其他程序

  下面是一個demo:

class Order{
 
    /**
     * 阻塞模式(後面的程序會一直等待前面的程序執行完畢)
     */
    public
function createOrder1(){ $file = fopen(__DIR__.'/lock.txt','w+'); //加鎖 if(flock($file,LOCK_EX)){ //TODO 執行業務程式碼 flock($file,LOCK_UN);//解鎖 } //關閉檔案 fclose($file); } /** * 非阻塞模式(只要當前檔案有鎖存在,那麼直接返回) */ public function createOrder2(){
$file = fopen(__DIR__.'/lock.txt','w+'); //加鎖 if(flock($file,LOCK_EX|LOCK_NB)){ //TODO 執行業務程式碼 flock($file,LOCK_UN);//解鎖 }else{ //TODO 執行業務程式碼 返回系統繁忙等錯誤提示 } //關閉檔案 fclose($file); } }

小提示:在執行fclose()的時候檔案會自動解鎖,所以可以省略解鎖的程式碼。