.NET多線程編程(3):線程同步
2007/1/5 17:39:19
隨著對多線程學習的深入,你可能覺得需要了解一些有關線程共享資源的問題. .NET framework提供了很多的類和數據類型來控制對共享資源的訪問。

考慮一種我們經常遇到的情況:有一些全局變量和共享的類變量,我們需要從不同的線程來更新它們,可以通過使用System.Threading.Interlocked類完成這樣的任務,它提供了原子的,非模塊化的整數更新操作。

還有你可以使用System.Threading.Monitor類鎖定對象的方法的一段代碼,使其暫時不能被別的線程訪問。

System.Threading.WaitHandle類的實例可以用來封裝等待對共享資源的獨占訪問權的操作系統特定的對象。尤其對于非受管代碼的互操作問題。

System.Threading.Mutex用于對多個復雜的線程同步的問題,它也允許單線程的訪問。

像ManualResetEvent和AutoResetEvent這樣的同步事件類支持一個類通知其他事件的線程。

不討論線程的同步問題,等于對多線程編程知之甚少,但是我們要十分謹慎的使用多線程的同步。在使用線程同步時,我們事先就要要能夠正確的確定是那個對象和方法有可能造成死鎖(死鎖就是所有的線程都停止了相應,都在等者對方釋放資源)。還有贓數據的問題(指的是同一時間多個線程對數據作了操作而造成的不一致),這個不容易理解,這么說吧,有X和Y兩個線程,線程X從文件讀取數據并且寫數據到數據結構,線程Y從這個數據結構讀數據并將數據送到其他的計算機。假設在Y讀數據的同時,X寫入數據,那么顯然Y讀取的數據與實際存儲的數據是不一致的。這種情況顯然是我們應該避免發生的。少量的線程將使得剛才的問題發生的幾率要少的多,對共享資源的訪問也更好的同步。

.NET Framework的CLR提供了三種方法來完成對共享資源 ,諸如全局變量域,特定的代碼段,靜態的和實例化的方法和域。

(1) 代碼域同步:使用Monitor類可以同步靜態/實例化的方法的全部代碼或者部分代碼段。不支持靜態域的同步。在實例化的方法中,this指針用于同步;而在靜態的方法中,類用于同步,這在后面會講到。

(2) 手工同步:使用不同的同步類(諸如WaitHandle, Mutex, ReaderWriterLock, ManualResetEvent, AutoResetEvent 和Interlocked等)創建自己的同步機制。這種同步方式要求你自己手動的為不同的域和方法同步,這種同步方式也可以用于進程間的同步和對共享資源的等待而造成的死鎖解除。

(3) 上下文同步:使用SynchronizationAttribute為ContextBoundObject對象創建簡單的,自動的同步。這種同步方式僅用于實例化的方法和域的同步。所有在同一個上下文域的對象共享同一個鎖。



Monitor Class



在給定的時間和指定的代碼段只能被一個線程訪問,Monitor 類非常適合于這種情況的線程同步。這個類中的方法都是靜態的,所以不需要實例化這個類。下面一些靜態的方法提供了一種機制用來同步對象的訪問從而避免死鎖和維護數據的一致性。

Monitor.Enter 方法:在指定對象上獲取排他鎖。

Monitor.TryEnter 方法:試圖獲取指定對象的排他鎖。

Monitor.Exit 方法:釋放指定對象上的排他鎖。

Monitor.Wait 方法:釋放對象上的鎖并阻塞當前線程,直到它重新獲取該鎖。

Monitor.Pulse 方法:通知等待隊列中的線程鎖定對象狀態的更改。

Monitor.PulseAll 方法:通知所有的等待線程對象狀態的更改。

通過對指定對象的加鎖和解鎖可以同步代碼段的訪問。Monitor.Enter, Monitor.TryEnter 和 Monitor.Exit用來對指定對象的加鎖和解鎖。一旦獲取(調用了Monitor.Enter)指定對象(代碼段)的鎖,其他的線程都不能獲取該鎖。舉個例子來說吧,線程X獲得了一個對象鎖,這個對象鎖可以釋放的(調用Monitor.Exit(object) or Monitor.Wait)。當這個對象鎖被釋放后,Monitor.Pulse方法和 Monitor.Pu

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 亚洲性色成人av天堂| 无人视频免费观看免费视频 | 北条麻妃在线观看视频| 97久久香蕉国产线看观看| 日本高清有码视频| 伊人色综合视频一区二区三区| 五月天婷五月天综合网站| 成人欧美一区二区三区的电影| 亚洲欧美在线播放| 色橹橹欧美在线观看视频高清| 国产狂喷潮在线观看| 日本漂亮继坶中文字幕| 公粗一晚六次挺进我密道视频| 16女下面流水不遮视频| 天天干天天射天天爽| 久久狠狠高潮亚洲精品| 爽爽影院在线免费观看| 国产免费av片在线播放| 97视频免费在线| 日产乱码卡1卡2卡三卡四在线| 亚洲日本天堂在线| 美女扒开腿让男人捅| 国产精品免费视频网站| 99久久精品这里只有精品| 无码人妻丰满熟妇区毛片| 久久精品国产日本波多野结衣| 特级毛片aaaaaa蜜桃| 全免费a级毛片免费看| 麻豆国产96在线|日韩| 国精品在亚洲_欧美| www.久久99| 日本性视频网站| 久久综合九色综合97手机观看| 欧美亚洲校园第一页| 亚洲欧美日韩另类精品一区二区三区| 精品一区二区三区波多野结衣| 国产大片黄在线观看| 91福利免费视频| 在线观看无码av网站永久免费| 久久99国产精品久久99| 欧美人善交videosg|