在.NET上執(zhí)行多線程操作要考慮的兩大因素(2)_.Net教程
推薦:Flex與.NET互操作:基于WebService的數(shù)據(jù)訪問Flex提供了mx:WebService、mx:HTTPService和mx:RemoteObject標(biāo)簽來直接訪問遠(yuǎn)程數(shù)據(jù),這用于與各種不同語言環(huán)境開發(fā)提供的遠(yuǎn)程服務(wù)端數(shù)據(jù)源(如WebService)進(jìn)行數(shù)據(jù)交互通信顯得更加容易. 本文以.NET平臺下C#語言開發(fā)的WebService作為遠(yuǎn)程數(shù)據(jù)源,詳細(xì)介紹Fl
在.NET架構(gòu)中,最簡單也最常見的解決競爭條件的方法是使用“臨界區(qū)”。而在VB.NET中,該語句是“加鎖”,并在C#中是“鎖定”,這兩種語句都是把對象作為參數(shù)。其他嘗試鎖定相同對象實(shí)例使用的臨界區(qū)(包括上文所指的)會阻止運(yùn)行直到鎖定解除,這樣每次就只有一個臨界區(qū)運(yùn)行。我們先前舉例的一段代碼現(xiàn)在看起來是這樣的:
| 以下為引用的內(nèi)容:
int x = 5; object lockObject = new object(); Monitor.Enter(lockObject); x = x 10; Monitor.Exit(lockObject); |
什么是監(jiān)控器可以提供而臨界區(qū)做不到的呢?答案是沒有。除非你在解鎖后需要更細(xì)粒度的控制權(quán)。有些復(fù)雜的代碼可能需要鎖定或長或短的一段時間,這都取決于運(yùn)行的情況,比方一個變量的值。在這種情況下,選擇監(jiān)控器要比需選擇臨界區(qū)更合適。
另一個值得關(guān)注的有關(guān)數(shù)據(jù)完整性的問題是死鎖。當(dāng)多個線程鎖定資源導(dǎo)致它們都不能夠繼續(xù)運(yùn)行時,就會出現(xiàn)死鎖。例如:
| 以下為引用的內(nèi)容:
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都調(diào)用它們的第一段語句并且同時完成運(yùn)行,那它們都無法調(diào)用它們的第二段語句——這就是一個死鎖。所以編寫代碼的時候細(xì)心,要仔細(xì)想清楚怎樣編寫代碼才更有利。死鎖的發(fā)生常見于新手,因為他們過分設(shè)置鎖定把它變得太詳細(xì)了。如果代碼被嵌套鎖定通常表明需要對編寫的代碼加以認(rèn)真檢查。
分享:淺談在.NET應(yīng)用程序中進(jìn)行Erlang風(fēng)格的并行編程Erlang能夠用來編寫高度可伸縮的并行應(yīng)用程序,其中經(jīng)常會出現(xiàn)數(shù)以百萬計的輕量級組件,這種類似于線程的組件被稱之為actor。不幸的是,這往往需要您使用Erlang這種相對神秘的編程語言重寫所有代碼。不過我們也有其他選擇,例如使用名不見經(jīng)傳的CCR平臺來進(jìn)
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實(shí)現(xiàn)分頁示例代碼
- 相關(guān)鏈接:
- 教程說明:
.Net教程-在.NET上執(zhí)行多線程操作要考慮的兩大因素(2)
。