У меня пока не было проблем с использованием одной и той же блокировки для нескольких методов, но мне интересно, могут ли на самом деле какие-то проблемы (производительность?), о которых я не знаю:
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
также используется одиночным (в свойстве экземпляра)?
Изменить: Чтобы уточнить мой вопрос об использовании одного и того же объекта блокировки в классе Singleton:
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
}
}
Это вызовет проблемы?