日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

在.NET上執(zhí)行多線程操作要考慮的兩大因素(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:Flex與.NET互操作:基于WebService的數據訪問
Flex提供了mx:WebService、mx:HTTPService和mx:RemoteObject標簽來直接訪問遠程數據,這用于與各種不同語言環(huán)境開發(fā)提供的遠程服務端數據源(如WebService)進行數據交互通信顯得更加容易. 本文以.NET平臺下C#語言開發(fā)的WebService作為遠程數據源,詳細介紹Fl

在.NET架構中,最簡單也最常見的解決競爭條件的方法是使用“臨界區(qū)”。而在VB.NET中,該語句是“加鎖”,并在C#中是“鎖定”,這兩種語句都是把對象作為參數。其他嘗試鎖定相同對象實例使用的臨界區(qū)(包括上文所指的)會阻止運行直到鎖定解除,這樣每次就只有一個臨界區(qū)運行。我們先前舉例的一段代碼現在看起來是這樣的:

以下為引用的內容:

  int x = 5;

  object lockObject = new object();

  Monitor.Enter(lockObject);

  x = x 10;

  Monitor.Exit(lockObject);

什么是監(jiān)控器可以提供而臨界區(qū)做不到的呢?答案是沒有。除非你在解鎖后需要更細粒度的控制權。有些復雜的代碼可能需要鎖定或長或短的一段時間,這都取決于運行的情況,比方一個變量的值。在這種情況下,選擇監(jiān)控器要比需選擇臨界區(qū)更合適。

另一個值得關注的有關數據完整性的問題是死鎖。當多個線程鎖定資源導致它們都不能夠繼續(xù)運行時,就會出現死鎖。例如:

以下為引用的內容:

  Thread A:

  Monitor.Enter(object1);

  Monitor.Enter(object2);

  //Do work

  Monitor.Exit(object1);

  Monitor.Exit(object2);

  Thread B:

  Monitor.Enter(object2);

  Monitor.Enter(object1);

  //Do work

  Monitor.Exit(object1);

  Monitor.Exit(object2);

如果線程A和線程B都調用它們的第一段語句并且同時完成運行,那它們都無法調用它們的第二段語句——這就是一個死鎖。所以編寫代碼的時候細心,要仔細想清楚怎樣編寫代碼才更有利。死鎖的發(fā)生常見于新手,因為他們過分設置鎖定把它變得太詳細了。如果代碼被嵌套鎖定通常表明需要對編寫的代碼加以認真檢查。

分享:淺談在.NET應用程序中進行Erlang風格的并行編程
Erlang能夠用來編寫高度可伸縮的并行應用程序,其中經常會出現數以百萬計的輕量級組件,這種類似于線程的組件被稱之為actor。不幸的是,這往往需要您使用Erlang這種相對神秘的編程語言重寫所有代碼。不過我們也有其他選擇,例如使用名不見經傳的CCR平臺來進

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時間:2009-06-11
相關.Net教程