使用文件锁解决并发问题

前言

PHP使用文件锁非常简单,通过文件锁可以快速地设计一些并发量不大的临时功能。不过文件锁的缺点非常致命,所以如果有条件的话最好还是用上MQ。


关键函数原型 bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
这里解释一下第二个参数

  • LOCK_SH 获取共享锁.
  • LOCK_EX 获取互斥锁.
  • LOCK_UN 释放锁.
  • 官方文档还说:如果你不想代码块阻塞导致超时,可以加上LOCK_NB.

同步锁

1
2
3
4
5
6
7
8
9
<?php
$fp = fopen("lockfile", "r");
if(flock($fp,LOCK_EX))
{
//处理请求,会一直等待
flock($fp,LOCK_UN);
}
fclose($fp);
?>

异步锁(伪)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$fp = fopen("lockfile", "r");
if(flock($fp,LOCK_EX | LOCK_NB))
{
//处理请求
flock($fp,LOCK_UN);
}
else
{
echo "如果文件被锁,这里会即时返回信息";
}
fclose($fp);
?>
------ 本文结束 ------

版权声明

yoGa's Blog by yoga lee is licensed under a Creative Commons BY-NC-ND 4.0 International License.
yoga lee创作并维护的yoGa's Blog采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于yoGa's Bloghttp://yoga.ibye.cn ),版权所有,若需转载请注明出处,谢谢支持。