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()的時候文件會自動解鎖,所以可以省略解鎖的代碼。


 

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