请具体回答!我非常熟悉围绕集合锁定、线程安全等的更好(最佳)实践。只想要一些关于这个特定场景的答案/想法。
我们有一些类型的遗留代码:
public class GodObject
{
private readonly Dictionary<string, string> _signals;
//bunch of methods accessing the dictionary
private void SampleMethod1()
{
lock(_signals)
{
//critical code section 1
}
}
public void SampleMethod2()
{
lock(_signals)
{
//critical code section 2
}
}
}
所有对字典的访问都在这样的锁定语句中。我们遇到了一些错误,如果锁定没有显式工作,可以解释这些错误——这意味着 2 个或更多线程同时访问字典。
所以我的问题是 - 是否有任何情况下多个线程可以同时访问关键部分?对我来说,这应该是不可能的,因为引用是只读的,所以对象似乎不会发生变化,并且 lock() 周围的大多数问题都与死锁有关,而不是没有发生同步。但也许我错过了一些细微差别或一些明显的东西?
这是在长期运行的 Windows 服务 .NET Framework 3.5 中运行的。