Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 18907|Odpowiedź: 0

[Źródło] lock Dlaczego można zablokować tylko referencję, a nie typ wartości

[Skopiuj link]
Opublikowano 08.12.2016 10:43:37 | | |

Jeśli przekażesz typ wartości, zostanie on zablokowany, a następnym razem, gdy kod się tu uruchomi, zostanie ponownie zablokowany i nie będzie to ten sam obiekt dwa razy, więc nie da się go zablokować



lock(x)
{
  ...
}

Blokada faktycznie odbywa się przez obiekt Monitor:

Powyższe jest równoważne z:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
spróbuj
{
  ...   
}
w końcu
{
  System.Threading.Monitor.Exit(obj);
}

A następnie, cytując oryginalne słowa MSDN:
Użyj Monitora do blokowania obiektów (czyli typów odniesień), a nie typów wartości. Gdy przekazujesz zmienną typu avalue do Enter, jest ona oznaczana jako obiekt. Jeśli ponownie przekażesz tę samą zmienną do Enter, jest ona oznaczona jako osobny obiekt i wątek się nie blokuje. W tym przypadku kod, który Monitor rzekomo chroni, nie jest chroniony. Co więcej, gdy przekazujesz zmienną do Exit, powstaje jeszcze jeden osobny obiekt. Ponieważ obiekt przekazany do Exit różni się od obiektu przekazanego do Enter, Monitor rzuca SynchronizationLockException. Więcej informacji można znaleźć w temacie koncepcyjnym Monitorzy.




Poprzedni:Aktualizacja Pythona 2.6.6 do 2.7.5 na systemie Centos 6.4
Następny:Różnica między Directory.GetCurrentDirectory a Application.StartupPath
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com