我在stackoverflow和和Mmsdn上看了这里,不敢相信我找不到这个问题在互联网上徘徊。 Llet说我有一个与私人成员的课程,我想在几种公共方法中访问。这些公共方法将通过不同的线程调用,因此需要同步。
public class MyClass { private Object SomeSharedData = new Object(); public void MethodA() { lock( SomeSharedData) { // do something MethodB(); } } public void MethodB() { lock( SomeSharedData) { // do something } } }
注意,该类的用户可以调用MethodA
MethodB
,但是Methoda也调用MethodB,这会导致嵌套的锁定条件。
这保证是安全的吗? 换句话说,.NET是否通过参考计算锁来处理此操作,以便当我从这些方法中弹出时,锁会减少? 还是.net在幕后执行一些魔术,从而简单地忽略了来自同一线程的对象上的所有后续锁?
yyes,基于.NET in的锁是递归的,并计数。
从文档for
Monitor
:
它是合法的,对于同一线程 没有它不止一次调用 阻塞;但是,数量相等 必须调用退出电话 其他线程在物体上等待 会取消阻止