可使用PHP現成的函數flock來實現:php
<?php多線程
$fp = fopen("/tmp/lock.txt","w+");ide
if(flock($fp, LOCK_EX)){// 進行排它型鎖定函數
fwrite($fp,"Write something here\n");線程
flock($fp, LOCK_UN);// 釋放鎖定進程
}else{it
echo "Couldn't lock the file !";class
}file
fclose($fp);程序
?>
用flock在寫文件前先鎖上,等寫完後解鎖,這樣就實現了多線程同時讀寫一個文件避免衝突。大概就是下面這個流程
/*
*flock(file,lock,block)
*file 必需,規定要鎖定或釋放的已打開的文件
*lock 必需。規定要使用哪一種鎖定類型。
*block 可選。若設置爲 1 或 true,則當進行鎖定時阻擋其餘進程。
*lock
*LOCK_SH 要取得共享鎖定(讀取的程序)
*LOCK_EX 要取得獨佔鎖定(寫入的程序)
*LOCK_UN 要釋放鎖定(不管共享或獨佔)
*LOCK_NB 若是不但願 flock() 在鎖定時堵塞
/*
if (flock($file,LOCK_EX))
{
fwrite($file,'write more words');
flock($file,LOCK_UN);
}
else
{
//處理錯誤邏輯
}
fclose($file);
)