Dav*_*ave 16 .net c# synchronization locking
可能重复:
C#中的重入锁定
我在这里看过StackOverflow和MSDN,并且无法相信我在互联网上找不到这个问题.
假设我有一个私有成员的课程,我想在几个公共方法中访问.这些公共方法将由不同的线程调用,因此需要同步.
public class MyClass
{
private Object SomeSharedData = new Object();
public void MethodA()
{
lock( SomeSharedData) {
// do something
MethodB();
}
}
public void MethodB()
{
lock( SomeSharedData) {
// do something
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,MethodA和MethodB可以由此类的用户调用,但MethodA也调用MethodB,这会导致嵌套锁定条件.
这保证是安全的吗?换句话说,.NET是通过引用计数锁来处理这个,所以当我弹出这些方法时,锁会减少吗?或者.NET在幕后执行一些魔术,它只是忽略了源自同一线程的对象上的所有后续锁定?
Jon*_*eet 19
是的,基于Monitor
.NET的锁是递归的,并且是计数的.
来自以下文档Monitor.Enter
:
如果没有阻塞,同一个线程不止一次调用Enter是合法的; 但是,在等待对象的其他线程将解除阻塞之前,必须调用相同数量的Exit调用.
这是否是一件好事还有争议......
归档时间: |
|
查看次数: |
7490 次 |
最近记录: |