PHP中鎖機制的應用

不言
發布: 2023-04-03 13:22:02
原創
2408 人瀏覽過

這篇文章跟大家介紹的文章內容是關於PHP中鎖機制的應用,有很好的參考價值,希望可以幫助到有需要的朋友。

應用環境

解決高並發,庫存為負數的情況

阻塞模式

如果其他進程已經加鎖文件,當前進程會一直等其他行程解鎖檔案後繼續執行

flock($fp, LOCK_EX)     // 檔案鎖定

非阻斷模式

如果其他行程已經新增鎖文件,目前進程不會等其他進程解鎖文件,直接返> 回,也就是直接忽略加鎖的程式碼到關閉文件那塊

flock($fp,LOCK_EX | LOCK_NB) // 檔案鎖定

程式碼

flock($fp, LOCK_EX)flock($fp,LOCK_EX | LOCK_NB) 換一下就行,其他都一樣

<?php
$fp = fopen(&#39;lock.txt&#39;, &#39;r&#39;);
if( flock($fp, LOCK_EX) ){      // flock($fp,LOCK_EX | LOCK_NB)
    $info = D()->query('SELECT surplus_total_num FROM tb_product WHERE id=1 LIMIT 1');
    if( $info['surplus_total_num'] > 0 ){
        D()->execute('UPDATE tb_product SET surplus_total_num = surplus_total_num - 1  WHERE id=1');
        $isSurplusProduct = 1;
    }else{
        $isSurplusProduct = 0;
    }
    flock($fp, LOCK_UN);
}
fclose($fp);

if( !$isSurplusProduct ) exit('已经没有产品了');
登入後複製

並發測試

查看資料庫的庫存是否一致保持為0 ab參數:-c:並發數;-n:總請求數

#ab -c 20 -n 1000 http://www.test.com/test.php

相關推薦:

##php如何實現等比例壓縮圖片的程式碼

php命令列編寫shell命令的實例#

以上是PHP中鎖機制的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!