DotNet對同步的支持

.NET Framework在System.Threading,System.EnterpriseServices和System.Runtime.Compiler命名空間中提供了一些類,程序員可以使用這些類開發線程安全的代碼.下面是這些類的簡單說明:


Monitor:
Monitor對象用於鎖定重要的代碼段,這樣,在任一時刻就只能有一個線程訪問重要的代碼段.Monitor對象可幫助確保重要代碼段的原子性.

Mutex:
Mutex對象類似於Monitor對象,但Mutex對象只允許一個線程式訪問在進程中的資源.Mutex的重載構造函數可以用於指定Mutex的所屬關係和名稱.

Interlocked
Interlocked類包含如下的方法,CompareExchange().Decrement(),Exchange()和Increment(),這些方法爲同步訪問由多個線程共享的變量提供了一種簡單機制.

AutoResetEvent,ManualResetEvent
AutoResetEvent,ManualResetEvent用於通知一個或多個等待線程:事件已經觸發.這些類都是不能繼承的.

SynchronizationAttribute
SynchronizaitionAttribute確保同一時刻只有一個線程可以訪問對象,這種同步進程是自動的.不需要顯式鎖定任何代碼段.

MethodImplAttribute
這個屬性告訴編譯器方法該如何實現.

    一 MethodImplAttribute 類
    System.Runtime.CompilerService命名空間包含的一些屬性將影響CLR在運行期間的行爲.MethodImplAttribute 就是這樣一個屬性,它告訴CLR方法是如何實現的. MethodImplAttribute的一個構造函數把 MethodImplOptions 枚舉作爲其參數,MethodImplOptions枚舉有一個字段 Synchronized, 它指定在任一時刻只允許一個線程訪問這個方法,這類似使用 lock 關鍵字.使用這個屬性的方法如下:
using System.Runtime.CompilerServier;
using ......
.....
       [MethodImpl(MethodImplOptions.Synchronized)]
       public void MethodName(params)
       {
       }
.....
       這樣,當多個線程同時調用這個方法時,會保證只有一個線程運行,其它線程處於等待狀態.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章