c#中数据的同步加锁机制 的几种方法

作者: zengde 分类: 技术相关 发布时间: 2021-10-26 03:41

一,锁定机制最简单的做法就是使用锁定关键字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(),会放弃对资源的所有权