Использование одной и той же блокировки для нескольких методов

У меня пока не было проблем с использованием одной и той же блокировки для нескольких методов, но мне интересно, действительно ли в следующем коде могут возникнуть проблемы (производительность?), о которой я не знаю:

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)?

Изменить: чтобы прояснить мой вопрос об использовании того же объекта блокировки в классе 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
      }  
}

Будет это вызывает проблемы?

21
задан Cœur 3 September 2017 в 17:37
поделиться