具体代码实现如下:
/**
* @param string $path 操作文件路径
* @param string $mode 打开文件方式
* @param string $data 往文件中写入内容
* return 成功返回true,失败则返回false
**/
function writeData($path,$mode,$data) {
$fh = fopen($path,$mode);
$time = 0;
$maxtime = 100;
do{
if($time>0) {
usleep(rand(1,10000));
}
$time += 1;
} while(!flock($fh,LOCK_EX) && $time<=$max_time);
if($time == $max_time) {
return false;
}
fwrite($fh,"$data /r/n");
flock($fh,LOCK_UN);
fclose($fh);
return true;
}
1、使用共享锁LOCK_SH,如果是读取,不需要等待,但如果是写入,需要等待读取完成,才能进行下一步的写入操作
2、使用独占锁LOCK_EX,无论是写入还是读取,都需要等待
3、LOCK_UN,无论使用写入还是读取,使用完后需要解锁
4、LOCK_NB,当被锁定时,不阻塞,而是提示锁定
不明白之处,请看下一篇文章!!!