<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    幾年前,Eric Lippert注意到根據同樣源代碼進行優化構建和非優化構建會導致不同的潛在死鎖。這個問題會在C# 4.0中被“修復”。“修復”放在引號當中,是因為解決方式也有它自己的問題。

    最初的問題可能來自于編譯器在把IL轉化為機器代碼的時候,根據你是否打開或關閉優化器和調試器,以非一致的行為插入了no-op指令。Lippert提道:

    回想一下,lock(obj){body}實際上就是下面代碼的語法:

    var temp = obj;
    Monitor.Enter(temp);
    try { body }
    finally { Monitor.Exit(temp); }

    這里的問題是,如果編譯器在Monitor.Enter和受try保護的區域之間生成了no-op指令,那么運行時就有可能 在Monitor.Enter之后和try之前拋出線程終止異常。在這樣的情形下,finally不會執行,那么也就產生了程序鎖泄漏,程序有可能出現死 鎖。如果在非優化和優化構建中不存在差異,就不存在這個問題。


    不過。這個解決方案[譯注:C# 4.0是將Monitor.Enter()移入到try子句中,并在Enter的時候會傳遞一個引用值,標識鎖是否被占用。在finnally子句中,會 首先判斷鎖是否被占用,如果被占用,則釋放鎖。]也有它自己的問題。據Eric說,“保持一致與不一致相比,完全就是五十步笑百步。它仍然存在很大的問 題...這樣生成的代碼所[譯注:生成的代碼是指編譯器將lock轉換為IL,實際上就相當于使用Monitor的語法]隱含的意義就是認為死鎖程序是可 能 發生的最糟糕的事情。這種說法未必準確。”

    鎖的目的是為了保護可變資源,或者換句話說,是為了避免可變資源的多個潛在用戶訪問資源已被破壞的版本。4.0版本的現有解決方案并沒有包含回滾到 原始狀態的功能,也沒有保證可變資源的完整性。強行進入lock語句的finally子句、釋放鎖以及允許訪問任意等待 線程(該線程占用了已被破壞的資源),都有可能引發異常。這一解決方案在結果的一致性、降低死鎖的可能性和對訪問被破壞狀態可能付出的代價方面,做出了折 衷。該問題尤其在多線程編程中會存在風險。

    這個特定的折衷是對兩種糟糕結果的選擇:程序死鎖,還是不再保護重要資源的狀態。所謂“兩害相權取其輕”,當我們進行多線程編程時,就必須在多個設計決策與權衡中做出一個選擇。

    這篇文章反響熱烈, 一些開發人員認為這類設計問題不只限于多線程,在“安全鎖”和“安全異常”之間也存在不同之處。Lippert也同意多線程只會讓難處理的問題更難,“正 確獲得鎖僅僅是萬里長征的第一步”,你的設計還需要考慮其他各種異常,以及在異常發生后如何處理它們。大量的回復者指出終止線程的危險性,并部分同意 Lippert所說的“終止異常純粹就是找死”。

    posted on 2009-03-24 17:14 墻頭草 閱讀(233) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 久久精品亚洲综合一品| 亚洲av午夜成人片精品电影| 国产亚洲美女精品久久久久狼 | 久久综合图区亚洲综合图区| jizz免费观看视频| 亚洲一区精品无码| 中文永久免费观看网站| 国产亚洲福利精品一区| 99爱在线观看免费完整版| 亚洲福利一区二区精品秒拍| 国产免费久久精品99re丫y| 亚洲性色高清完整版在线观看| 国产麻豆视频免费观看| 亚洲欧美日韩一区二区三区 | 国产在线播放免费| 羞羞漫画页面免费入口欢迎你| 亚洲 自拍 另类小说综合图区| selaoban在线视频免费精品| 亚洲国产精品SSS在线观看AV| 无码人妻精品中文字幕免费| 亚洲成aⅴ人片在线观| 好男人视频在线观看免费看片| 亚洲成a人无码亚洲成av无码| 亚洲另类少妇17p| 四虎国产精品永久免费网址| 91亚洲性爱在线视频| 国产成人免费一区二区三区| 久久久精品国产亚洲成人满18免费网站 | 亚洲色在线无码国产精品不卡| 国产成人免费永久播放视频平台| www免费黄色网| 亚洲国产精品网站久久| 国产免费爽爽视频免费可以看| 福利免费在线观看| 亚洲三级中文字幕| 亚洲国产精品人人做人人爱| 88av免费观看入口在线| 国产成人亚洲精品播放器下载| 亚洲av无码一区二区三区乱子伦 | 成人午夜免费视频| 亚洲日本国产精华液|