我正在尝试模拟在繁忙站点上进行文件写入。我编写了以下代码,但最终导致计算机冻结。
$loop = 10000;
$sleep = 500000;
$i =0;
while($i < $loop) {
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
$handler = fopen($file,"a+");
if($handler) {
if (flock($handler, LOCK_EX)) {
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
fwrite($handler,"Script 1 took $totaltime secs\n");
}
flock($handler, LOCK_UN);
fclose($handler);
}
$i++;
usleep($sleep);
}
我不能使用LOCK_NB,因为它在Windows上无法工作。如果执行以上代码的进程少于13个,则该代码可以正常工作。如何处理这种死锁情况?
$starttime = microtime(TRUE)
,您将获得时间值作为简单的浮点数,省去了 explode/addition 步骤。 - Marc B