c#中数据的同步加锁机制 的几种方法
一,锁定机制最简单的做法就是使用锁定关键字Lock。Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁。它的语法如下:
lock(lockObj) { //加锁的代码段,一般是操作共同资源的代码 }
二、同步方法(synchronized)
案例代码:
using System; using System.Runtime.CompilerServices; namespace App4Thread { class Program { private static int count = 0; private static object myMutex = new object(); [MethodImpl(MethodImplOptions.Synchronized)] public static void Main() { count++; } } }
[MethodImpl(MethodImplOptions.Synchronized)],该属性在方法调用期间锁定,阻止其他调用者调用。
命名空间:System.Runtime.CompilerServices
程序集:mscorlib(mscorlib.dll 中)
功能:System.Runtime.CompilerServices命名空间为编译器编写器提供使用托管代码在元数据中指定属性。
三、c#中Monitor的使用
首先lock和Minitor有什么区别呢?
其实lock在IL代码中会被翻译成Monitor。也就是Monitor.Enter(obj)和Monitor.Exit(obj).
lock(obj)
{
}
等价为:
try
{
Monitor.Enter(obj)
}
catch
{
}
finally
{
Monitor.Exit(obj)
}
所以lock能做的,Monitor肯定能做,Monitor能做的,lock不一定能做。那么Monitor额外的功能呢?
1:Monitor.TryEnter(obj,timespan)—-timeout之后,就不执行这段代码了。lock可是一直会死等的。
2:还有Monitor.Wait()和Monitor.Pulse()。在lock代码里面如果调用了Monitor.Wait(),会放弃对资源的所有权