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

Widok: 30344|Odpowiedź: 2

[Źródło] Bezpiecznik gwintu C# z blokadą

[Skopiuj link]
Opublikowano 13.06.2016 17:26:25 | | |

Jeśli Twój kod jest w procesie, w którym uruchamia się wiele wątków jednocześnie, może uruchamiać kod jednocześnie. Jeśli wynik każdego wykonania jest taki sam jak pojedynczy wątek, a wartości innych zmiennych są takie same jak oczekiwano, jest to bezpieczne dla wątku.
Innymi słowy, interfejs dostarczany przez klasę lub program jest atomowy dla wątków i przełączanie się między wieloma wątkami nie prowadzi do niejednoznaczności w wyniku wykonania interfejsu, co oznacza, że nie musimy brać pod uwagę synchronizacji.
Problemy z bezpieczeństwem wątków są spowodowane zarówno przez zmienne globalne, jak i statyczne.
Jeśli każdy wątek ma tylko operacje odczytu dla zmiennych globalnych i zmiennych statycznych, ale nie wykonuje operacji zapisu, to ogólnie rzecz biorąc, ta zmienna globalna jest bezpieczna dla wątków; Jeśli wiele wątków wykonuje operacje odczytu i zapisu na zmiennej jednocześnie, zazwyczaj wymagana jest synchronizacja wątków, w przeciwnym razie może to wpłynąć na bezpieczeństwo wątków.

Celem blokady jest zapobieganie operacjom współbieżnym podczas wykonywania wielowątkowego, a obiekty typu referencyjnego blokowania pozwalają na działanie tylko jednego wątku w jego zablokowanym obszarze naraz.

Lock może zablokować tylko jedną zmienną typu odniesienia, czyli zablokować adres




Istnieje różnica między wynikami biegu z blokowaniem a bez niego:

Po zablokowaniu: wartość i będzie maleć jeden po drugim, nie będzie skoków, nie będzie powtarzających się wyników, aż do wartości 0;

Brak blokady: wartość wyjściowa i będzie skakać, nieciągła malejąca, i może mieć również wartość -1;

Powód: Po dodaniu blokady tylko jeden wątek może jednocześnie wykonać kod w zamkniętym obszarze, a oba wątki są wykonywane w kolejności, więc nie będzie przerwanego wyjścia.




Poprzedni:Użytkownik anulowany z dialogu zapisu (MS Visual Database Tools)
Następny:Fajna klasa DBHelper, która wykonuje procedury przechowywane
Opublikowano 14.06.2016 10:53:36 |
 Ziemianin| Opublikowano 10.02.2022 09:18:58 |
.NET/C# Lock Principle Monitor zapewnia szczegółowe wyjaśnienie
https://www.itsvse.com/thread-9633-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