Mr_Xu 2020-05-12 16:35:36 5480次浏览 1条评论 0 0 0

这个函数一般用来处理并发事件的
网上的例子

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // 进行排它型锁定
    /**
    *这写需要执行的代码
    **/
    flock($fp, LOCK_UN);    // 释放锁定
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

但是其中需要执行的代码在并发的情况下所有用户进程都会执行,这是一个大坑啊。
所以 flock($fp, LOCK_EX) 要加上 flock($fp, LOCK_EX|LOCK_NB) 在锁定时阻塞,才不会出现多个进程都会执行,但这样也会导致,当一个进程执行程序时其它进程直接返回失败错误。

  • 评论于 2020-08-25 15:50 举报

    如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。

    看手册上面说默认不就是阻塞的吗?

您需要登录后才可以评论。登录 | 立即注册