C# mutex

C# mutex
W programowaniu C# możemy użyć klasy Mutex do synchronizacji między dwoma wątkami. Działa jak zamek. Zatrzymuje dwa wątki przed wykonywaniem jednego lub więcej działań jednocześnie. Mutex działa w wielu procesach. Daje metody WaitOne (), a także releasemutex (). Metoda WaitOne () służy do blokowania zasobu, a metoda releaseMutex () jest tutaj do odblokowania zasobu. Jest to przydatne, gdy pracujemy z projektem wielokrotnie lub projektem, w którym mamy wiele zadań. Powinniśmy tego użyć, gdy próbujemy zablokować inne zadania lub wątki, które nie mogą korzystać z zasobu, podczas gdy drugie zadanie lub wątek używa tego zasobu.

Tutaj, w tym przewodniku, wyjaśnimy Ci, w jaki sposób używamy klasy Mutex w programowaniu C#. Podajemy różne przykłady korzystania z tej klasy mutex () w naszym programie C#. Wykonujemy podane przykłady w Ubuntu 20.04.

Przykład 1

Wykonamy przykład przy użyciu klasy mutex (). Ponieważ używamy Ubuntu 20.04 Aby wykonać te przykłady, musimy otworzyć edytor tekstu tego Ubuntu 20.04, a następnie utwórz plik o dowolnej nazwie naszego wyboru i zapisz ten plik z rozszerzeniem pliku „.CS ”. Następnie wpisz następujący kod w tym pliku. Szczegółowo wyjaśniamy również każdy wiersz tego danego programu.

Pierwszy wiersz tego kodu C# to „Korzystanie z systemu”, biblioteki, a za pomocą tej biblioteki możemy uzyskać różne klasy i funkcje naszego kodu C#. Otrzymujemy klasę „konsoli” i funkcję „Writeline” za pomocą tej biblioteki. Słowo kluczowe „używanie” służy do odbierania parametrów. System. Wątp ”jest tutaj do generowania zadań i odbierania obiektów z klasy. Teraz zaimportujemy przestrzeń nazw z nazwą „Demomutex”. Stworzyliśmy również klasę o nazwie „Program”. Tworzymy instancję zwaną „mutex”, która jest równa „nowemu mutex ()”. „Nowy” to słowo kluczowe do tworzenia nowej instancji.

Następnie wywołaj funkcję „główną” w naszym kodzie C#. W tej „głównej” funkcji mamy pętlę „dla” używaną do tworzenia pięciu różnych wątków. Ponieważ ta pętla inicjuje „a” z „1”, warunkiem jest „a<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.

Wtedy mamy „ThreadObj.Start () ”, w którym„ start () ”jest używany do zmiany stanu„ ThreadOBJ ”na stan działający. Poza tę pętlą „dla” mamy „konsolę.Kluczem przeczytać()". Będzie to wykorzystać do oczekiwania na keypress. Mamy poniżej metody z nazwą „Demomutex”, która jest „statyczna”. Używamy tej metody do wdrażania synchronizacji za pomocą „mutex”. „Konsola.Writeline ”jest tutaj do wydrukowania napisanego w nim oświadczenia. Po tej „konsoli.Instrukcja WriteLine ”użyjemy metody„ spróbuj ”.

Z drugiej strony mamy „konsolę.Oświadczenie pisarza ”. Kiedy zobaczysz wyjście, będzie dla ciebie jasne, w jaki sposób ta „konsola.WriteLine ”drukuje podane stwierdzenie. Groźba.Sleep (2000) ”służy do zawieszania lub zatrzymywania wykonania bieżącego wątku na czas, który jest tutaj podany jako parametr. Po tym ponownie używamy „konsoli.Oświadczenie pisarza ”. Używamy słowa kluczowego „Słowo kluczowe” do czyszczenia zasobów, które przydzielimy w bloku próbnym lub instrukcji w tym bloku „wreszcie” wykonanym, gdy instrukcja TRY pozostawia kontrolę. W oświadczeniu „Wreszcie” nazwiemy metodę „Releasemutex”, która służy do odblokowania, aby inny wątek rozpoczął wykonanie, który próbuje wykonać.

Podajemy również wyjście tego kodu na poniższym obrazku. Możesz zobaczyć, jak ten kod podaje wyjście na ekranie. Kompilujemy nasz kod z tym poleceniem, a gdy kod jest bezbłędny, utworzy dla nas plik EXE. Ten plik „exe” jest następnie wykonywany za pomocą polecenia „mono”. I pamiętaj, że kiedy używamy tego polecenia „mono”, musimy użyć „.rozszerzenie pliku exe z nazwą pliku, a następnie uruchom to polecenie, aby uzyskać wyjście.

W tym wyjściu widać, że gdy jeden wątek chce wprowadzić sekcję krytyczną, pozostałe wątki również chcą wejść, ale muszą poczekać, aż pierwszy wątek zakończy wykonanie, ponieważ używamy funkcji Mutex „Waitone ()”. Kiedy ten wątek zakończy wykonanie, następny wątek wchodzi i rozpoczyna wykonanie i istnieje po wykonaniu zadania. Pozwala na wprowadzanie następnego wątku i rozpocząć wykonywanie. Te same kroki są powtarzane, aż warunek będzie prawdziwy.

Przykład nr 2

Tutaj mamy inną ilustrację przy użyciu metody Mutex (). Wypróbujmy ten przykład, aby zrozumieć tę koncepcję.

Te same instrukcje użyte w tym kodzie C# są „używając systemu” i „systemu.Gwintowanie ”. Klasa jest „mutexprogramem”, a w klasie stworzyliśmy instancję klasy Mutex z nazwą „Mutex” za pomocą „nowego” słowa kluczowego, a następnie wywoływania funkcji „głównej” poniżej tego. Metoda WaitOne () próbuje uzyskać blokadę. Jeśli mutex nie jest dostępny, to „Waitone ()” blokuje i czeka, aż będzie dostępny. Tutaj również określamy limit czasu. Jeśli wywołamy metodę WaitOne () na „obiekt mutex”, a limit czasowy przechodzi bez możliwości uzyskania mutex, wówczas Waitone zwraca false. Gdy zwróci false, instrukcja napisana poniżej zostanie wykonana: „konsola.Oświadczenie pisarza ”. I to oświadczenie jest używane do drukowania.

Jeśli zdobędziemy prawdę, przechodzimy do wykonanej sekcji kodu, która jest funkcją „run ()”, a ta funkcja jest zdefiniowana poniżej. Kiedy kończy się „run ()”, blok „wreszcie” wykonuje się, który uwalnia mutex za pomocą „mutexrelease”. Wyjaśniamy ten „mutexrelease” w poprzednim kodzie. Definiujemy tutaj funkcję „run ()”, w której zamierzamy wydrukować instrukcję za pomocą „konsoli.WriteLine () ”i w końcu mamy„ konsolę.Czytaj linię()". Ta „konsola.Readline ”jest tutaj do odczytania kompletnych ciągów do momentu naciśnięcia klawisza Enter.

Wyjście pokazuje tylko instrukcje „run ()”, ponieważ zwraca prawdziwie i przenosi się do „run ()”. Jeśli wykonamy to jednocześnie na drugim terminalu, to na drugim terminalu pokaże oświadczenie zapisane w instrukcji IF, ponieważ próbuje uzyskać „mutex”, ale „mutex” jest już w użyciu innej aplikacji , więc musi poczekać na wydanie „mutex”.

Wniosek

Ten samouczek bada „mutex” w programowaniu C#. Wykazujemy tutaj dwa przykłady i używamy tego „mutex”, abyś zrozumiał tę koncepcję. Ta klasa „Mutex” zapewni nam funkcje „Waitone ()” i „realeasemutex ()”. Ten „Waitone ()” jest używany do blokowania, a „releasemutex ()” jest używany do odblokowania zadania lub wątku. Używamy obu metod w naszych przykładach i wyjaśniamy je szczegółowo. Mam nadzieję, że poznasz tę koncepcję „mutex” po dokładnym badaniu tego przewodnika, a także będziesz mógł użyć tej klasy „mutex” w swoim projekcie.