php文件锁不起作用,php里面的文件锁

通过使用ab做并发执行的时候,发现库存减少不一致,为什么呢?

答:主要是由于并发的时候,多个php程序去操作了同一个资源,这个时候造成资源的抢夺,数据不一致。为了解决这个问题,可以使用php里面的文件锁来实现。在多个php程序操作某一个资源的时候,需要先去获取这个锁资源,只有获取到锁的程序才有权限去操作资源。当操作完成后,释放锁资源,使得别的程序能再次去抢夺锁资源

1.创建一把锁,一个文本文件,随意命名,lock.txt

$key = fopen('lock.txt','r');

do{

$lockStatus = flock($key,LOCK_EX);//获得锁

//为防止php占cpu不放

usleep(50000);//0.05s

}while(!$lockStatus);

//抢到锁的程序可以操作资源

if($lockStatus){

//为防止高并发,所有程序写在这里即可

//减一操作,多个程序去操作减一

$sql   = "select * from kucun where goo_id =1";

$res   = mysql_query($sql);

$data  = mysql_fetch_assoc($res);

$data['kucun']--;

$sql   = "update kucun set kucun = " . $data['kucun'] . "where good_id = 1";

mysql_query($sql);

echo "库存正在减少";

flock($lockStatus,LOCK_UN);//释放锁

}else{

echo "系统繁忙!";

}

fclose($key);//关闭指向的文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值