Я хотел бы знать, существуют ли какие-либо 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 многопоточный код?
Лучшее руководство по блокировке и многопоточности, которое я нашел, - это эта страница (это текст, который я использую при работе с блокировкой и распределением потоков):
http : //www.albahari.com/threading/
Вы хотите абзац «Блокировка и безопасность потоков», но прочтите и остальное, он очень хорошо написан.
Блокируйте как можно меньше, но как можно больше.
По возможности избегайте блокировок - в .NET 4.0 есть альтернативы, которые не вызывают переключения контекста.
Старайтесь не блокировать несколько раз. Структурируйте свой API соответствующим образом. Например, очередь. DeQueue - создайте альтернативу DeQueue(int amount), которая может удалить много элементов с одной блокировкой.