Mam następujące sytuacji: chcę wzajemnie wykluczać dostęp do obiektu.Czy można bezpiecznie blokować i monitorować ten sam obiekt?
tej pory normalnie byłoby użyć obiektu blokady
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
Teraz mam również metodę, która może być wywołana z innego wątku. Nie powinien być blokowany na nieznany czas, zamiast tego powinien udzielić odpowiedzi w określonym czasie.
W tym przypadku chciałbym użyć monitora, jak
method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
teraz moje pytanie brzmi: może zablokować i monitor być mieszane w taki sposób, jeśli lockobject jest taka sama i wzajemnie wykluczają się wzajemnie, czy będzie trzeba zmienić każdy zamek na monitor.
Czy oba razy ten sam żeton będzie "zablokowany", czy monitor utworzy kolejny token dla obiektu, a następnie blokadę?
W mgnieniu oka nie widzę, że aplikacja działa jednocześnie w kodzie. Ale nie wiem, czy mogą wystąpić problemy z timingiem, gdzie CODE1 i CODE2 są wykonywane równolegle.
Czuję twój ból; Często żałuję, że słowo kluczowe "lock" nie upłynęło w jakiś sposób –