.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)
{
}
.....
这样,当多个线程同时调用这个方法时,会保证只有一个线程运行,其它线程处于等待状态.