PHP解決多線程同時讀寫一個文件的問題

可使用PHP現成的函數flock來實現:php

  1. <?php多線程

  2. $fp = fopen("/tmp/lock.txt","w+");ide

  3. if(flock($fp, LOCK_EX)){// 進行排它型鎖定函數

  4. fwrite($fp,"Write something here\n");線程

  5. flock($fp, LOCK_UN);// 釋放鎖定進程

  6. }else{it

  7. echo "Couldn't lock the file !";class

  8. }file

  9. fclose($fp);程序

  10. ?>



用flock在寫文件前先鎖上,等寫完後解鎖,這樣就實現了多線程同時讀寫一個文件避免衝突。大概就是下面這個流程

  1. /*

  2. *flock(file,lock,block)

  3. *file 必需,規定要鎖定或釋放的已打開的文件

  4. *lock 必需。規定要使用哪一種鎖定類型。

  5. *block 可選。若設置爲 1 或 true,則當進行鎖定時阻擋其餘進程。

  6. *lock

  7. *LOCK_SH 要取得共享鎖定(讀取的程序)

  8. *LOCK_EX 要取得獨佔鎖定(寫入的程序)

  9. *LOCK_UN 要釋放鎖定(不管共享或獨佔)

  10. *LOCK_NB 若是不但願 flock() 在鎖定時堵塞

  11. /*


  12. if (flock($file,LOCK_EX))

  13. {

  14. fwrite($file,'write more words');

  15. flock($file,LOCK_UN);

  16. }

  17. else

  18. {

  19. //處理錯誤邏輯

  20. }

  21. fclose($file);

  22. )

相關文章
相關標籤/搜索