.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)
{
}
.....
這樣,當多個線程同時調用這個方法時,會保證只有一個線程運行,其它線程處於等待狀態.