手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#中Monitor对象与Lock关键字的区别分析
C#中Monitor对象与Lock关键字的区别分析
摘要:Monitor对象1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是M...

Monitor对象

1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取锁之后因为异常,致锁无法释放,所以需要在try{} catch(){}之后的finally{}结构体中释放锁(Monitor.Exit())。

2.Monitor的常用属性和方法:

Enter(Object) 在指定对象上获取排他锁。

Exit(Object) 释放指定对象上的排他锁。

IsEntered 确定当前线程是否保留指定对象锁。

Pulse 通知等待队列中的线程锁定对象状态的更改。

PulseAll 通知所有的等待线程对象状态的更改。

TryEnter(Object) 试图获取指定对象的排他锁。

TryEnter(Object, Boolean) 尝试获取指定对象上的排他锁,并自动设置一个值,指示是否得到了该锁。

Wait(Object) 释放对象上的锁并阻止当前线程,直到它重新获取该锁。

Lock关键字

1.Lock关键字实际上是一个语法糖,它将Monitor对象进行封装,给object加上一个互斥锁,A进程进入此代码段时,会给object对象加上互斥锁,此时其他B进程进入此代码段时检查object对象是否有锁?如果有锁则继续等待A进程运行完该代码段并且解锁object对象之后,B进程才能够获取object对象为其加上锁,访问代码段。

2.Lock关键字封装的Monitor对象结构如下:

复制代码 代码如下:

try

{

Monitor.Enter(obj);

dosomething();

}

catch(Exception ex)

{

}

finally

{

Monitor.Exit(obj);

}

3.锁定的对象应该声明为private static object obj = new object();尽量别用公共变量和字符串、this、值类型。

Monitor和Lock的区别

1.Lock是Monitor的语法糖。

2.Lock只能针对引用类型加锁。

3.Monitor能够对值类型进行加锁,实质上是Monitor.Enter(object)时对值类型装箱。

4.Monitor还有其他的一些功能。

本文代码示例:

复制代码 代码如下:

class Program

{

private static object obj = new object();

public void LockSomething()

{

lock (obj)

{

dosomething();

}

}

public void MonitorSomeThing()

{

try

{

Monitor.Enter(obj);

dosomething();

}

catch(Exception ex)

{

}

finally

{

Monitor.Exit(obj);

}

}

public void dosomething()

{

//做具体的事情

}

}

【C#中Monitor对象与Lock关键字的区别分析】相关文章:

深入多线程之:内存栅栏与volatile关键字的使用分析

C#中Web.Config加密与解密的方法

C#中StringBuilder用法以及和String的区别分析

解析C#中的装箱与拆箱的详解

c#中GetType()与Typeof()的区别

C# 面向对象的基本原则

描述C#多线程中lock关键字的使用分析

ref 和out传参的区别分析

C# dynamic关键字的使用方法

c#中Linq to Sql 增删除的实例

精品推荐
分类导航