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);//關閉指向的文件

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章