Инструкции того, когда использовать блокировку

Я хотел бы знать, существуют ли какие-либо guidelineswhich, за которыми разработчик должен следовать относительно когда (и где) для размещения блокировок.

Например: Я понимаю, что код, такой как это должен быть заблокирован, для предотвращения возможности другого потока, изменяющего значение SomeHeapValue неожиданно.

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = inputValue_;
  }

}

Мой вопрос, однако, как глубоко каждый идет с блокировкой? Например, если у нас есть этот код:

class Foo
{
  public SomeHeapObject myObject;
  public void DoSummat(object inputValue_)
  {
    myObject.SomeHeapValue = GetSomeHeapValue();
  }

}

Мы должны привязать DoSummat (...) метод, или мы должны привязать GetSomeHeapValue () метод?

Есть ли какие-либо инструкции, которые Вы все имеете в виду когда strcturing многопоточный код?

17
задан miguel 6 May 2010 в 08:48
поделиться

2 ответа

Лучшее руководство по блокировке и многопоточности, которое я нашел, - это эта страница (это текст, который я использую при работе с блокировкой и распределением потоков):

http : //www.albahari.com/threading/

Вы хотите абзац «Блокировка и безопасность потоков», но прочтите и остальное, он очень хорошо написан.

22
ответ дан 30 November 2019 в 13:12
поделиться
  • Блокируйте как можно меньше, но как можно больше.

  • По возможности избегайте блокировок - в .NET 4.0 есть альтернативы, которые не вызывают переключения контекста.

  • Старайтесь не блокировать несколько раз. Структурируйте свой API соответствующим образом. Например, очередь. DeQueue - создайте альтернативу DeQueue(int amount), которая может удалить много элементов с одной блокировкой.

3
ответ дан 30 November 2019 в 13:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: