/*
*flock(file,lock,block)
*lock 必需。规定要使用哪种锁定类型。
*block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。
*lock
*LOCK_SH 要取得共享锁定(读取的程序)
*LOCK_EX 要取得独占锁定(写入的程序)
*LOCK_UN 要释放锁定(无论共享或独占)
*LOCK_NB 如果不希望 flock() 在锁定时堵塞
/*
if (flock($file,LOCK_EX))
{
fwrite($file,'write more words')
flock($file,LOCK_UN)
}
else
{
//处理错误逻辑
}
fclose($file)
)
1、一般的加锁,针对并发量不大的情况;
2、对文件进行加锁时,设置一个超时时间。大致实现如下:
if($fp=fopen($fileName,'a')){
$startTime=microtime()
do{
$canWrite=flock($fp,LOCK_EX)
if(!$canWrite){
usleep(round(rand(0,100)*1000))
}
}while((!$canWrite)&&((microtime()-$startTime)<1000))
if($canWrite){
fwrite($fp,$dataToSave)
}
fclose($fp)
}
3、对 *** 作的文件进行随机读写,以降低并发的可能性;
4、将所有要 *** 作的进程放入一个队列中;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)