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

Widok: 20027|Odpowiedź: 0

[Źródło] Kluczowe słowo C# lock oznacza blok instrukcji jako obszar krytyczny poprzez uzyskanie mutexu dla danego obiektu, wykonanie instrukcji, ale...

[Skopiuj link]
Opublikowano 31.12.2015 17:51:01 | | |
Słowo kluczowe oznaczające blok instrukcji jako strefę krytyczną, wykonując mutex dla danego obiektu, wykonując polecenie, a następnie zwalniając blokadę.

Instrukcja lock zasadniczo używa Monitor.Enter i Monitor.Exit, czyli Monitor.Enter(this) jest wykonywana podczas wykonywania lock(this), a Monitor.Exit(this) wykonuje się na końcu nawiasu zakrętowego. Co to oznacza, dla dowolnego obiektu pierwsza część pamięci to adres wszystkich metod, a druga część to indeks. Wskazuje na SyncBlock w obszarze pamięci podręcznej SyncBlock w CLR. Co to znaczy? To znaczy, gdy wykonujesz Monitor.Enter(Object), jeśli wartość indeksu obiektu jest ujemna, wybierz SyncBlock z pamięci podręcznej SyncBlock i umieść jego adres w indeksie obiektu. To kończy blokadę oznaczoną obiektem, a pozostałe wątki chcą ponownie wykonać operację Monitor.Enter(object), która uzyska indeks z dodatnim obiektem, a następnie czekają. Dopóki indeks nie stanie się ujemny, tzn. wątek używa Monitor.Exit(object), aby zmienić indeks na ujemny.

Na co należy zwrócić uwagę podczas używania zamka:
1.lock nie może zablokować wartości null Obiekt może wskazać null, ale null nie musi być zwalniany. (Zobacz także: Rozumienie pełnego nulla)
2.lock nie może zablokować typu ciągu, choć jest on również typem referencyjnym. Ponieważ typ ciągu jest "najeden" przez CLR
Oznacza to, że w całym programie istnieje tylko jedna instancja danego ciągu znaków, a ten sam obiekt reprezentuje ten tekst we wszystkich wątkach wszystkich działających domen aplikacji. Dlatego dopóki blokada jest umieszczona na ciągu o tej samej zawartości gdziekolwiek w procesie aplikacji, wszystkie instancje tego ciągu w aplikacji będą zablokowane. Dlatego najlepiej jest zamykać prywatnych lub chronionych członków, którzy nie będą trwali.
3.locklock obiekt to granica pamięci bloku programu
4. Typ wartości nie może być zablokowany, ponieważ "obiekt jest zwolniony" na czerwono w poprzednim tekście, a typ wartości nie jest typem referencyjnym
5.lock unika blokowania typów publicznych lub obiektów, które nie są kontrolowane przez program.
Na przykład, jeśli instancja jest publicznie dostępna, blokada (to) może być problematyczna, ponieważ niekontrolowany kod również może zablokować obiekt. Może to prowadzić do zakleięć, gdzie dwa lub więcej wątków czeka na zwolnienie tego samego obiektu. Blokowanie publicznych typów danych (w przeciwieństwie do obiektów) również może powodować problemy z tego samego powodu.
Przy użyciu lock(this) wartość zmiennej członka klasy może zostać zmieniona przez metodę, która nie znajduje się w strefie krytycznej

Scenariusz aplikacji: Często stosuje się go do zapobiegania niepewnym wyjątkom w wartości zmiennych publicznych spowodowanym operacjami wielowątkowymi, aby zapewnić bezpieczeństwo operacji









Poprzedni:Win8 uruchamia usługę SQL Server 2012
Następny:[Speed] Skaner z otwartym portem segmentu IP dla szybkiej prędkości skanowania!!
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