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

Widok: 2976|Odpowiedź: 2

[Źródło] Jak Lazy w C# chroni wątki

[Skopiuj link]
Opublikowano 02.07.2023 21:41:55 | | |
Po .NET 4.0 w .NET Framework wprowadzono bezpieczny typ leniwego ładowaniaLeniwy
Lazy może działać w środowisku wielowątkowym, gwarantowanymGetValueFunkcja jest wykonywana tylko raz, co implementujeTryb singleton

W przeszłości używaliśmy kwadratowych blokad oceny do implementacji wzorców singleton lub do wykorzystania statycznych funkcji inicjalizacyjnych klas
W przypadku typu Lazy proces ten jest uproszczony, a wydajność lepsza

Gdy Lazy zostanie utworzony, możesz określić tryb instalacji wątku, obecnie są dwa tryby,Tylko publikacjaEksekcjaI Publikacja

Tryb Tylko Publikacja


1. Uruchomić funkcję inicjalizacji i umieścić ją w pudełku wewnętrznymPudełkotyp, rozwiązuje problem oceny wartości zerowej, jeśli przypadek został utworzony, zwróci wartość null,Proces jest niezabezpieczony wątkiem

2. Określ, czy m_boxed jest pusty, m_boxed jest pola zapisane przez wartość; jeśli jest równe pustemu, jest ustawione na pudełkowe, ta metoda może zapewnić atomowość,Proces jest bezpieczny pod względem wątków

3. Jeśli CreateValue zwraca puste, oznacza to, że inne wątki już utworzyły instancje, a następnie ustawiają na już utworzone instancje

4. Oznacz metodę inicjalizacji jako inicjalizowaną, co zwykle występuje w przypadku jednoczesnego uruchomienia, i wykonaj CreateValue wielokrotnie


Tylko publikacjaTryb jest używany na podstawieInterlocked.CompareExchange, ta klasa zawiera metody atomowościCAS (porównanie i zamiana)

CAS jest implementowany za pomocą instrukcji atomowych dostarczanych przez CPU, a różne wersje w środowisku uruchomieniowym mogą mieć różne implementacje
Implementacja specyficzna dla powiązanych elementów W natywnej metodzie zainteresowani przyjaciele mogą sprawdzić konkretną implementację za pomocą kodu coreclr/jvm

W tym trybie,Funkcja singleton może działać wielokrotnie, ale ostatecznie gwarantowane jest, że uzyskamy tylko jeden przypadek

Tryb ExcutionIPublication

EksekcjaI PublikacjaTryb używany w tym trybieVolatile+MonitorMonitorTak jestzamekImplementacja tego polecenia, czyli implementacja Monitora w natywnym kodzie, jest dużą blokadą

MonitorObsługiwane są tryby uśpienia kolejek i wątków, co może zapewnić, że cały blok metody jest wykonywany w stanie jednowątkowym


Oryginalny link:Logowanie do linku jest widoczne.




Poprzedni:ASP.NET różnica między ThreadStatic, CallContext i HttpContext
Następny:SQL Server zapytuje aktualną liczbę połączeń do bazy danych
 Ziemianin| Opublikowano 02.07.2023 21:42:16 |
 Ziemianin| Opublikowano 04.07.2023 19:19:45 |
Optymalizacja wydajności w C#: Lazy inicjalizuje Lazy<T> z opóźnieniem
https://www.itsvse.com/thread-7700-1-1.html
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