Heim > Backend-Entwicklung > PHP-Tutorial > php里面的文件锁

php里面的文件锁

WBOY
Freigeben: 2016-06-23 13:01:20
Original
909 Leute haben es durchsucht

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

    

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage