這篇文章跟大家介紹的文章內容是關於PHP中鎖機制的應用,有很好的參考價值,希望可以幫助到有需要的朋友。
解決高並發,庫存為負數的情況
如果其他進程已經加鎖文件,當前進程會一直等其他行程解鎖檔案後繼續執行
flock($fp, LOCK_EX) // 檔案鎖定
如果其他行程已經新增鎖文件,目前進程不會等其他進程解鎖文件,直接返> 回,也就是直接忽略加鎖的程式碼到關閉文件那塊
flock($fp,LOCK_EX | LOCK_NB) // 檔案鎖定
flock($fp, LOCK_EX)
和flock($fp,LOCK_EX | LOCK_NB)
換一下就行,其他都一樣
<?php $fp = fopen('lock.txt', 'r'); 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中文網其他相關文章!