ami*_*110 3 c# multithreading locking external critical-section
我面临的情况迫使我锁定一个锁定对象,该对象位于实例对象内部我想知道它是否真实?
澄清:
public class classA
{
object objLock = new object();
public void MethodA(object objClassA)
{
classA cls = (classA)objClassA;
lock(cls.objLock)
{
Do something with cls
}
}
}
Run Code Online (Sandbox Code Playgroud)
是允许这样做的吗?
您锁定的对象位于同一个类中,但是位于不同的实例中.从这个意义上讲,您并没有打破封装,但您仍然希望提取该代码,以防止锁定外部对象.这是一个例子:
public class classA
{
private readonly object objLock = new object();
public void MethodA(object objClassA)
{
classA cls = (classA)objClassA;
cls.DoSomething();
}
private void DoSomething()
{
lock (this.objLock)
{
Do something with cls
}
}
}
Run Code Online (Sandbox Code Playgroud)