Я хотел бы знать, есть ли какие-либо руководящие принципы, которым разработчик должен следовать в отношении того, когда (и где) устанавливать блокировки.
Например: я понимаю, что такой код должен быть заблокирован, чтобы избежать возможности другого потока неожиданно изменить значение 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 ()?
Существуют ли какие-либо рекомендации, которые вы все должны учитывать при структурировании многопоточного кода?