在.NET上執(zhí)行多線程操作要考慮的兩大因素(2)_.Net教程
推薦: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(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平臺來進
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-在.NET上執(zhí)行多線程操作要考慮的兩大因素(2)
。