国产探花免费观看_亚洲丰满少妇自慰呻吟_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);    }});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳高县| 长春市| 南城县| 屯昌县| 尼勒克县| 礼泉县| 玉溪市| 安徽省| 新民市| 旬邑县| 固镇县| 鄂温| 台南县| 东兰县| 射洪县| 雅安市| 永兴县| 句容市| 温宿县| 巫溪县| 比如县| 西安市| 南昌县| 江门市| 连南| 民县| 鹤庆县| 上蔡县| 麻江县| 和林格尔县| 如皋市| 从江县| 阳东县| 左贡县| 咸宁市| 明溪县| 洛隆县| 新源县| 彰武县| 衡东县| 门源|