【发布时间】:2023-03-08 11:53:01
【问题描述】:
到目前为止,我对多种方法使用同一个锁没有任何问题,但我想知道以下代码是否真的存在我不知道的问题(性能?):
private static readonly object lockObj = new object();
public int GetValue1(int index)
{
lock(lockObj)
{
// Collection 1 read and/or write
}
}
public int GetValue2(int index)
{
lock(lockObj)
{
// Collection 2 read and/or write
}
}
public int GetValue3(int index)
{
lock(lockObj)
{
// Collection 3 read and/or write
}
}
这3个方法和集合无论如何都没有关系。
另外,如果这个lockObj也被单例使用(在Instance属性中)会不会有问题?
编辑:澄清我在单例类中使用相同锁对象的问题:
private static readonly object SyncObject = new object();
public static MySingleton Instance
{
get
{
lock (SyncObject)
{
if (_instance == null)
{
_instance = new MySingleton();
}
}
return _instance;
}
}
public int MyMethod()
{
lock (SyncObject)
{
// Read or write
}
}
这会导致问题吗?
【问题讨论】:
-
将方法命名为好像它们只读取(“GetX”)进行写入的方法是非常糟糕的做法。特别是如果您将多个线程投入其中。
-
这取决于“写入”的类型——有时懒惰的读取可能是写入,在这种情况下,这并不总是不好的做法。
-
你能澄清最后一点吗? “另外,如果这个lockObj也被单例(在Instance属性中)使用,会不会有问题?”
标签: c# .net multithreading locking thread-safety