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