>  기사  >  백엔드 개발  >  php里面的文件锁

php里面的文件锁

WBOY
WBOY원래의
2016-06-23 13:01:20883검색

通过使用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);//关闭指向的文件

    

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.