日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php如何解决并发问题,PHP如何解决并发问题

發布時間:2023/12/15 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php如何解决并发问题,PHP如何解决并发问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP如何解決并發問題

有個問題:

一個進程開啟事務對表的某一行做了修改,但還沒有提交,另一個進程查詢該行數據,獲取到的是原始的,這時候上面的事物提交了,我再用這個原始數據的時候就有問題……

那我們該怎么解決這個問題呢?

1、文件鎖

如果對該表的更新或插入只有一個文件,這種方式是可以解決的

實現方式如下:

public static functioncbInventoryReserve() {$LOCK_FILE_PATH = $_SERVER[‘DOCUMENT_ROOT‘]."wmsinventoryapi/inventory/InventoryReserve.php";$fp = fopen( $LOCK_FILE_PATH, "r");if (!$fp) {die("Failed to open the lock file!");

}flock ( $fp,LOCK_EX );//需要進行的操作

$params = Flight::request()->getBody();$params = json_decode($params, true);if (! is_array($params) || empty($params)) {

Flight::sendRouteResult(array("error_code" => "40002","error_info" => "params empty"));

}$result = \Inventory\InventoryEngine::getInstance()->inventoryReserve($params);flock ( $fp,LOCK_UN );fclose ( $fp);

Flight::sendRouteResult($result);

}

函數說明??flock()會依參數operation所指定的方式對參數fd所指的文件做各種鎖定或解除鎖定的動作。此函數只能鎖定整個文件,無法鎖定文件的某一區域。

參數??operation有下列四種情況:

LOCK_SH 建立共享鎖定。多個進程可同時對同一個文件作共享鎖定。

LOCK_EX 建立互斥鎖定。一個文件同時只有一個互斥鎖定。

LOCK_UN 解除文件鎖定狀態。

LOCK_NB 無法建立鎖定時,此操作可不被阻斷,馬上返回進程。通常與LOCK_SH或LOCK_EX 做OR(|)組合。

單一文件無法同時建立共享鎖定和互斥鎖定,而當使用dup()或fork()時文件描述詞不會繼承此種鎖定。

返回值??返回0表示成功,若有錯誤則返回-1,錯誤代碼存于errno。

換言之:

使用共享鎖LOCK_SH,如果是讀取,不需要等待,但如果是寫入,需要等待讀取完成。

使用獨占鎖LOCK_EX,無論寫入/讀取都需要等待。

LOCK_UN,無論使用共享/讀占鎖,使用完后需要解鎖。

LOCK_NB,當被鎖定時,不阻塞,而是提示鎖定。

為了更好的移植性,對于文件的打開與關閉我選擇了fopen和fclose的組合,但flock的第一個參數要求的是int類型的文件描述符。這里對fopen返回的FILE類型的文件指針進行轉換,轉換為int型的文件描述符 (假設open函數返回的文件描述符為fd,而fopen返回的文件指針為*fp,則fd等價于fp->_fileno).

2、序列化接口(對象序列化)

所有php里面的值都可以使用函數serialize()來返回一個包含字節流的字符串來表示。unserialize()函數能夠重新把字符串變回php原來的值。 序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字。

classA {public $one = 1;public functionshow_one() {echo $this->one;

}

}//page1.php:

include("classa.inc");$a = newA;$s = serialize($a);//把變量$s保存起來以便文件page2.php能夠讀到

file_put_contents(‘store‘, $s);//page2.php:

// 要正確了解序列化,必須包含下面一個文件

include("classa.inc");$s = file_get_contents(‘store‘);$a = unserialize($s);//現在可以使用對象$a里面的函數 show_one()

$a->show_one();?>

3、select *** for update

Select …forupdate語句是我們經常使用手工加鎖語句。通常情況下,select語句是不會對數據加鎖,妨礙影響其他的DML和DDL操作。同時,在多版本一致讀機制的支持下,select語句也不會被其他類型語句所阻礙。

借助for update子句,我們可以在應用程序的層面手工實現數據加鎖保護操作。

for update子句的默認行為就是自動啟動一個事務,借助事務的鎖機制將數據進行鎖定。

開啟一個事務使用for update

start transaction;

select sum(quantity) from ws_inventory_item where inventory_item_id=86 for update;

再開啟另一個事務時,做update 操作的時,只能等待上面的事務,commit才能執行;

start transaction;update ws_inventory_item set quantity = quantity + 1 where inventory_item_id = 86;

原文:http://www.cnblogs.com/sdgf/p/5740998.html

總結

以上是生活随笔為你收集整理的php如何解决并发问题,PHP如何解决并发问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一区,二区 | 国产精品乱码一区二区视频 | 久久精品视频一区 | 9999国产精品| 开心黄色网 | 久久国产精品首页 | 久久国产热视频 | 色视频免费看 | 神马影院一区二区三区 | av伊人久久 | 亚洲国产一二 | 欧美激情一区二区三级高清视频 | 国产精品无码一区二区三区 | 福利一区在线 | 黄色大片免费在线观看 | 免费看日批 | 九一亚色 | jizz在线免费观看 | 日本三级久久 | 国产精品一区二区人人爽 | √天堂| 香蕉视频在线观看免费 | 蜜臀av午夜精品 | 日屁网站| se在线观看| 日本中文字幕第一页 | 都市激情中文字幕 | 国产中文在线视频 | 人妻无码久久一区二区三区免费 | 波多野结衣一二三四区 | 韩国三级hd中文字幕叫床浴室 | 激情婷婷综合网 | 国产精品麻豆果冻传媒在线播放 | 男人添女人下部高潮全视频 | 国产三级精品三级在线观看 | 免费毛片视频网站 | 激情 小说 亚洲 图片 伦 | 欧美一级免费在线观看 | 国产r级在线观看 | av黄色免费网站 | 青青草综合在线 | 国产日韩专区 | 亚洲男女视频在线观看 | 午夜精品久久久内射近拍高清 | 亚洲一区二区在线观看视频 | 亚洲精品99 | 色久月| www.精品国产| 亚洲a图 | 三级黄色在线视频 | 日韩精品一区在线观看 | 日日干夜夜爱 | 亚洲在线中文字幕 | 国产精品theporn动漫 | 91狠狠综合| 一级二级三级黄色片 | 一级黄色网| 国产资源免费 | 国产福利免费在线观看 | 欧美人妻精品一区二区免费看 | 毛片官网 | 最新中文字幕一区 | 欧美黄色免费网站 | 免费成人深夜夜行网站视频 | 欧美一区二区三区久久精品 | 涩涩视频在线播放 | 爱情岛论坛亚洲入口 | 91免费大片 | 成人男女视频 | 超碰免费成人 | 污视频导航 | 偷偷久久 | 精品久久久亚洲 | 成人国产三级 | 成人黄色免费网 | 美女网站全黄 | 日韩成人动漫在线观看 | 69色堂| 国产午夜大片 | 免费成人av网址 | 黄色片一区二区 | 在线日韩视频 | 金鱼妻日剧免费观看完整版全集 | 亚洲色成人www永久网站 | 欧美成人乱码一二三四区免费 | 国模少妇一区二区 | 国产少女免费观看高清 | 五月丁香花| 欧美日日 | 国产aⅴ爽av久久久久成人 | 少妇毛片一区二区三区 | 亚洲激情欧美 | 亚洲天堂av在线播放 | 国产一二精品 | 亚洲涩视频 | 日本做爰高潮又黄又爽 | 日本熟妇毛茸茸丰满 | 99精品国产免费 | 国产成人福利视频 |