PHP文件锁测验
作者:admin 日期:2014-06-06
PHP的锁大致是两种用法,一个是在WEB并发比较高的情况下的一些写操作可能需要加锁,这可能也是php锁最原始的使用方法。另外一种就是非阻塞的一种用法,比如已经有其它进程取得了这个锁本进程直接退出。
本文其实就是对PHP函数flock的一个调用实验。
步骤1: 创建一个lock.php文件, 写入代码如下,测试不加锁的情况下的输出。
<?php
class PHPLock { protected $_lockfile = "lock"; protected $_handler = null; function __construct() { $this->_handler = fopen($this->_lockfile, "w"); } function getLock() { return flock($this->_handler, LOCK_EX); } function freeLock() { return flock($this->_handler, LOCK_UN); } } $groupNum = 10; $groupSize = 10; $groupName = $argv[1]; $lock = new PHPLock(); for($group_i = 0; $group_i < $groupNum; $group_i ++) { //$lock->getLock(); echo "++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; for($i = 0; $i < $groupSize; $i++) { echo $groupName, ":", $group_i * $groupSize + $i, "\n"; usleep(100000 * rand(0, 100) / 100); } echo "--------------------------------------------------\n"; //$lock->freeLock(); }
步骤2: 创建一个start.sh的shell脚本,写入如下代码
php lock.php http://www.zeroplace.cn/#g1 & php lock.php http://www.zeroplace.cn/#g2 &
执行这个start.sh脚本,查看输出,发现有这样的情况(分组被破坏)。
步骤3: 把lock.php的30和37行的注释去掉,再执行start.sh脚本,发现分组全部没有被破坏。
评论: 0 | 查看次数: 5313