Chciałbym wiedzieć, czy istnieją jakieś wytyczne, które deweloper powinien śledzić, kiedy (i gdzie) umieścić zamki.Wytyczne, kiedy należy korzystać z blokowania
Na przykład: Rozumiem, że kod taki jak ten powinien być zablokowany, aby uniknąć możliwości kolejnego wątku zmieniającego wartość SomeHeapValue nieoczekiwanie.
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = inputValue_;
}
}
Moje pytanie brzmi jednak, jak głęboko pasuje do zamka? Na przykład, jeśli mamy ten kod:
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = GetSomeHeapValue();
}
}
powinniśmy zablokować w (...) sposobu DoSummat, czy powinniśmy zablokować w metodzie GetSomeHeapValue()?
Czy istnieją jakieś wytyczne, o których należy pamiętać podczas rysowania wielowątkowego kodu?
dzięki które są przydatne ... ale dlaczego wszystkie przykłady używać statycznych zmiennych składowych? są też problemy z bezpieczeństwem wątków w zmiennych należących do klasy, prawda? – miguel
@miguel: możliwe jest zablokowanie członka instancji za pomocą "blokady (tej)", wyjaśnienia i przykładu 2 na tej stronie zawierają więcej szczegółów: http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS. 71% 29.aspx. Myślę, że na stronie Albahari używa on statycznego, ponieważ wtedy nie musi wykonywać instancji klasy, co sprawia, że jego przykłady są krótsze. – user218447
@miguel: obiekt blokady musi być współdzielony przez wątki, aby był użyteczny, a statyczny to czysty i łatwy sposób na to. Statyczny nie jest z natury zły, po prostu nadużyty, tak jak w starych globach. –