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. )

相关文章
相关标签/搜索