您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php里面的文件锁

2024/5/15 0:14:04发布26次查看
通过使用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);//关闭指向的文件
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product