[C#]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(),会放弃对资源的所有权

 

 

 

 

 

 

上一篇:AndroidStudio3.0以后怎么打开Android Device Monitor【DDMS】


下一篇:Ubuntu断电重启后黑屏左上角光标闪烁,分辨率低解决办法