Я хотел бы знать, есть ли какие-либо указания, по которым разработчик должен следить за тем, когда (и где) размещать блокировки.Рекомендации по использованию блокировки
Например: я понимаю, что такой код должен быть заблокирован, чтобы избежать возможности неожиданного изменения значения 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()?
Есть ли какие-либо рекомендации, которые вы все должны учитывать при перенапряжении многопоточного кода?
спасибо, что является полезным ... но почему все примеры используют статические переменные-члены? есть проблемы с потокобезопасностью в переменных-членах класса, так? – miguel
@miguel: можно заблокировать экземпляр элемента с помощью функции «lock (this)», пояснения и пример2 на этой странице предоставляют более подробную информацию: http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS. 71% 29.aspx. Я думаю, что на сайте Albahari он использует статику, потому что тогда ему не нужно делать экземпляр класса, что делает его примеры короче. – user218447
@miguel: ваш объект блокировки должен использоваться совместно с потоками, чтобы использовать его, а статический - это простой и простой способ сделать это. Статичность не является по своей сути злой, ее просто неправильно используют, как древние глобальные. –