【发布时间】:2015-04-21 19:17:24
【问题描述】:
我有两个类 A 和 B。两者都互相调用并拥有自己的锁。我在一种特定情况下陷入僵局。这是示例代码。
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() 时触发了一秒计时器,我如何同步OneSecondTimerEvent()?
【问题讨论】:
-
我强烈建议不要使用循环依赖——尤其是在多线程环境中。
标签: c# multithreading