C# 需要同步两个类
我有两个类A和B。两个类都互相调用并拥有自己的锁。我在一个特定的场景中遇到了僵局。下面是示例代码C# 需要同步两个类,c#,multithreading,C#,Multithreading,我有两个类A和B。两个类都互相调用并拥有自己的锁。我在一个特定的场景中遇到了僵局。下面是示例代码 class A : Interface1, Interface2 { private B _bInstance = new B(); private object _aSync = new object(); private static A Instance; private A(){} public GetInstance() {
class A : Interface1, Interface2
{
private B _bInstance = new B();
private object _aSync = new object();
private static A Instance;
private A(){}
public GetInstance()
{
if (Instance == null) Instance = new A();
return Instance;
}
void Method1()
{
lock(_aSync)
{
_bInstance.Method1();
}
}
void WriteData()
{
lock (_aSync)
{
WriteToFile();
}
}
}
class B
{
private object _bSync = new object();
void Method1()
{
lock (_bSync)
{
// Have some code here which need to protect my
// member variables.
A.GetInstance.WriteData();
}
}
void OneSecondTimerEvent()
{
lock (_bSync)
{
// Have some code here which need to protect my
// member variables.
A.GetInstance.WriteData();
}
}
}
如果在执行
A.Method1()
时触发了1秒计时器,如何同步OneSecondTimerEvent()
要解决此问题,您可以:
- 手动订购
语句(即,如果A已经有锁,B从不接受额外的锁)lock
- 作用域只锁定到每个类的内部状态,从不嵌套锁。在这种情况下,有时需要复制状态来调用外部方法
- 使用允许这种嵌套的其他同步原语/构造(即读写器锁)