国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

小記:事務(進程 ID 56)與另一個進程被死鎖在 鎖 | 通信緩沖區 資源上,并且已被選作死鎖犧牲品。

2019-11-17 02:16:33
字體:
來源:轉載
供稿:網友

小記:事務(進程 ID 56)與另一個進程被死鎖在 鎖 | 通信緩沖區 資源上,并且已被選作死鎖犧牲品。

今天在做SQL并發UPDATE時遇到一個異常:(代碼如下)

//Parallel 類可產生并發操作(即多線程)Parallel.ForEach(topics, topic =>{    //DBHelper是一個封裝的數據庫操作類,下面這行代碼將執行UPDATE語句    DBHelper.Update(topic, "TopicID=" + topic.TopicID);});

出現此問題的原因是,在SQLServer默認情況下,一條SQL語句就是一個事務。而在多線程同時UPDATE時,會同時產生多個事務,A事務等待B事務結束,B事務等待A事務結束,則造成了死鎖。

解決方法:lock 加鎖 (即:在多個線程同時訪問 lock 代碼區時,只允許一個線程進入,其他線程處于等待狀態)

//聲明靜態只讀鎖對象PRivate static readonly object o = new object();Parallel.ForEach(topics, topic =>{    //加鎖    lock (o)    {        //同一時刻僅能有一個線程進入        DBHelper.Update(topic, "TopicID=" + topic.TopicID);    }});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴文县| 新化县| 通榆县| 镇巴县| 大悟县| 托克托县| 景宁| 林口县| 曲麻莱县| 团风县| 洛隆县| 太白县| 砚山县| 武夷山市| 三明市| 广宗县| 腾冲县| 浦县| 敖汉旗| 古丈县| 桐柏县| 波密县| 陆良县| 沁源县| 平乐县| 科技| 锡林郭勒盟| 穆棱市| 光泽县| 西华县| 株洲市| 东源县| 秀山| 河津市| 弥渡县| 汉寿县| 广宗县| 明溪县| 云南省| 高阳县| 漯河市|