Przykład nr 01: bez konstruktu blokady
Zacznijmy od pierwszego przykładu tego artykułu do wykorzystania blokady w C#. Więc musimy najpierw stworzyć strukturę kodu C#. Bez standardowej struktury kodu C# nasz kod nie zadziała. Dlatego musisz uruchomić go od użycia biblioteki „systemowej” określonej przez słowo kluczowe „używanie” w kodzie. Ponieważ musimy pracować nad wątkami, musimy określić przestrzeń nazw wątków biblioteki systemowej za pośrednictwem słowa kluczowego „za pomocą”.
Obie biblioteki są niezbędne do wdrożenia blokady i wątków w naszych przykładach w tym artykule. Następnie zainicjowaliśmy prostą klasę „testu” w kodzie C#. Możesz także zdefiniować przestrzeń nazw przed klasą, ale tutaj nie jest to konieczne. „Test” klasy zawiera w sumie 2 funkcje. Jedna to funkcja zdefiniowana przez użytkownika o nazwie „show ()”, a druga jest funkcją Main () C#, która jest również funkcją wykonawcy w kodach C#. Proces wykonywania rozpoczyna się od metody tego programu Main (). Używamy klasy „wątku” w przestrzeni nazw „Wątka” do tworzenia dwóch nowych obiektów wątków T1 i T1 za pomocą „nowego” słowa kluczowego.
W tworzeniu wątków użyliśmy funkcji „pokaż” w argumentach „wątku”, aby była funkcją wątku. Jak utworzyliśmy 2 wątki, oznacza to, że funkcja show () będzie używana 2 razy w kodzie odpowiednio jako wątek 1 i wątek 2. To tylko tworzenie wątków, a nie jego wykonanie. Aby wykonać wątek, musimy użyć funkcji „Start” z przestrzeni nazw klasy wątków. Tak więc obiekt „T1” wątku 1 został użyty do wywołania funkcji „Start” do wykonania funkcji wątku „pokaż”. Po pierwszym wątku drugi wątek T2 wykona metodę „pokaż” przy użyciu tej samej funkcji startowej. Teraz, gdy wątek zostanie uruchomiony, funkcja show () zostanie wykonana za pomocą pętli „for” dla maksymalnie 5 iteracji. Dopóki pętla nie zostanie wykonana, będzie nadal wykonywać „konsolę.Instrukcja funkcji writeLine () ”do wyświetlenia numeru iteracji za pomocą zmiennej iteracji„ i ”. Po każdej iteracji wątek wyniesie 3 sekundy, używając funkcji „Sleep” C# tutaj. To samo zostanie powtórzone, gdy rozpocznie się drugi wątek. Teraz, ponieważ używamy wątków do wykonywania funkcji „pokaż”, nie jest pewne, czy wykonuje ją w sposób . Wątek 1 Najpierw, a następnie wątek 2. Zapiszmy nasz kod, aby zobaczyć jego wynik.
Potrzebujemy poleceń C# Compiler i Runtime Environment, aby skompilować i wykonać nasze kody. Zainstalowaliśmy już oba. W ten sposób użyliśmy polecenia C# „MCS” używanego jako kompilator C# do skompilowania tego nowo wykonanego kodu. Kompilacja zwraca jedynie generowanie nowego pliku „exe” w tym samym bieżącym folderze i.mi. udany.
Wykonaliśmy więc ten plik „exe” dla kodu C# za pomocą polecenia „Mono” C#. Ponieważ oba wątki zostały uruchomione w funkcji Main (), więc nadal wykonują funkcję show () jeden po drugiej na każdej iteracji. Oznacza to, że jeden wątek pobierał zasoby z drugiego wątku, podczas gdy pierwszy nawet nie zakończył w pełni wykonania. Może to również spowodować impas.
Przykład nr 02: Z blokadą konstrukcją
Aby zapobiec wykonywaniu wątków w tym samym czasie, gdy zasoby są udostępniane lub żądane, musimy użyć konstrukcji „blokady” w kodzie C#. Konstrukt blokady zapewni, że nie pozwoli żadnemu innym wątku na uzyskanie zasobów obecnie używanych przez obecnie działający proces, dopóki nie zakończy wykonania. Może to działać na zasadzie priorytetu lub . kto pierwszy ten lepszy. Aby użyć konstruktu „blokuj”, musimy utworzyć obiekt do blokady za pomocą klasy „obiekt” C#.
Ten obiekt musi być statyczny typu tylko do odczytu. Możesz nazwać to wszystko, co chcesz. Tworzenie obiektu zamka zapewnia, że blokada jest tworzona i nie jest stosowana do niektórych części kodu. Nazwaliśmy to „przestań”. Teraz musimy utworzyć konstrukcję za pomocą słowa kluczowego „ZAMKAJ” i określić nazwę blokady w jego argumentach jako „Stop” w funkcji „pokaż”. Ponieważ funkcja show () jest naszym wątkiem, musimy umieścić jej implementację w konstrukcji „zamka” (i.mi. kawałek kodu, do którego chcemy ograniczyć dostęp.) Teraz nasz kod jest gotowy, ponieważ blokada została zastosowana do kawałka kodu w funkcji wątku. Zapisz ten zaktualizowany kod i wykonaj go, aby zobaczyć jego wynik.
Opracowaliśmy ten zaktualizowany kod na naszym terminalu Ubuntu, a następnie wykonaliśmy jego plik „exe”. Tym razem cała funkcja „show” została wykonana w pełni (i.mi. Pętla „for” jest zakończona.) Dzieje się tak, ponieważ za każdym razem, gdy wątek rozpoczyna się od funkcji „Start”, „Stop” Block Construct zablokował kod funkcji show (), dopóki pierwszy wątek nie zakończył wykonania. Potem zdarzyło się to również w wątku 2. Dlatego nasza moc jest płynna.
Powyższe dane wyjściowe wyświetli się bez żadnej przerwy i na sekundzie na ekranie. To nie pozwoli ci zobaczyć, jak iteracje działają jeden po drugim, gdy nie ma opóźnienia w wykonaniu podczas korzystania z zamka. Zaktualizujmy funkcję „pokaż” w tym samym kodzie i dodajmy funkcję snu w IT, zajmując 2 sekundy snu po wykonaniu konsoli.Instrukcja funkcji writeLine () podczas iteracji. Zapisz ten kod za pomocą Ctrl+S, zamknij plik i otwórz powłokę.
Po skompilowaniu pliku kodu wykonaliśmy jego plik „exe” na powładzie. Kod zaczyna wykonywać wątki. Pierwszy wątek „show” rozpoczął się podczas snu przez 2 sekundy po każdej iteracji, jak pokazano poniżej.
Po zakończeniu pierwszego wątku „Show”, blokada wydała dostęp do funkcji show, a wątek 2 został uzyskany do wykonania.
Wniosek:
Ten artykuł zawiera szczegóły dotyczące konstruktu blokady w C#. Omówiliśmy nasz pierwszy przykład bez użycia konstruktu „blokuj” i otrzymaliśmy dane wyjściowe z losowym i nieopisanym wykonywaniem funkcji wątku. Omówiliśmy również przyczyny tego nieuporządkowanego wykonania wątku. Następnie omówiliśmy przykład z użyciem konstrukcji „blokady” i otrzymaliśmy wyjście z losowym sposobem wykonywania wątków.