C PTHERED_MUTEX_LOCK Użycie funkcji

C PTHERED_MUTEX_LOCK Użycie funkcji
Jak sama nazwa sugeruje, należy użyć funkcji „pthread_mutex_lock”. Biblioteka Posix C wymyśliła tę funkcję, aby zablokować określony wątek, który może być używany jako wspólny zasób dla niektórych innych funkcji w programie. Konieczne jest uniknięcie impasu podczas wykonywania, gdy dwie lub więcej funkcji używa tego samego wątku, co ich zasoby do wykonania. Dlatego będziemy omawiać użycie funkcji „pthread_mutex_lock” biblioteki C Posx w Ubuntu 20.04 System.

Przykład 01:

Zacznijmy od pierwszego przykładu, aby zobaczyć funkcję Mutex_Lock () Posx w kodzie C. Zaczęliśmy od tworzenia plików z instrukcją „dotyk” Ubuntu w jego powładzie. Ten nowo wygenerowany plik można znaleźć w folderze domowym Linux. Aby dodać kod w tym pliku, musisz go otworzyć w ramach edytora Ubuntu i.mi., tekst, nano lub vim. Używamy tutaj edytora Nano do tworzenia kodu. Oba polecenia są wymienione na obrazie.

Rozpoczynamy nasz kod C z niektórymi nagłówkami C. Te pakiety nagłówka obejmują użycie standardowego wyjścia wejściowego do kodu, standardowych bibliotek, nagłówków sznurków i biblioteki wątków POSIX. Zainicjowaliśmy obiekt wątku poz.mi. utworzy tylko 3 wątki za pomocą IDS.

Po tym zmienne typu liczb całkowitych są zadeklarowane i.mi., „Ja” i liczę ”. Zmienna „i” jest inicjowana do 0. Oto zmienna pthread_mutex_t, aby zadeklarować „blokadę” wątku. Chociaż wykonanie rozpoczyna się od metody Main (), musimy najpierw przyjrzeć się funkcji wątku. Ta funkcja jest nazywana sekcją krytyczną naszego kodu ze względu na funkcję „mutex_lock”. Na początku funkcji wątku funkcja pthread_mutex_lock wykorzystuje zmienną blokady, aby zablokować konkretny wątek za pomocą jej „id” przekazanej metodą funkcji main ().

Teraz żaden inny wątek nie może użyć tego wątku, dopóki ten wątek nie zostanie odblokowany. Tak więc będzie nadal przetwarzać. Zmienna typu „i” jest inicjowana do 0 do użycia w pętli „for”. Zmienna „liczba” została zwiększona o 1. Zmienna liczba jest używana w instrukcji drukowania, aby poinformować nas, że „wątek1” jest już uruchomiony. W przypadku „pętli” zostanie tutaj zainicjowane, aby dać chwilę przerwy na wykonanie wątku. Następnie instrukcja drukowania poinformuje nas, że wątek 1 zostanie zakończony.

Funkcja pthread_mutex_unlock () jest wykorzystywana w przeciwieństwie do funkcji pthread_mutex_lock (), aby odblokować wątek numer 1. Kontrola przechodzi do metody Main (). Funkcja main () nadal tworzy funkcję wątku, dopóki liczba osiągnie 3. Oto tura metody Main () po utworzeniu 3 wątków, zamek, odblokowanie i wyjście.

Funkcja main () jest inicjowana za pomocą zmiennej całkowitej „ERR”. Instrukcja „If” jest tutaj używana do sprawdzenia, czy inicjalizacja wątku Mutex „L” jest nie powiodła się za pomocą funkcji „pthread_mutex_init ()”. Jeśli inicjalizacja się nie powiedzie, wydrukuje konkretną wiadomość instrukcji drukowania. Pętla „while” jest tutaj, aby zobaczyć stan ja.mi. „Ja” mniej niż 3. Potwierdzi to, że wartość „i” jest mniejsza niż 3, a zatem nadal tworzyć wątek. Każdy wątek zostanie zablokowany, gdy zostanie wywołany i do tego czasu nie można tworzyć żadnego innego wątku.

Jeśli otrzymamy błąd w wątku, wyświetlimy ten błąd w powładzie, przekształcając go w ciągu za pomocą metody „strerror”. Funkcja pthread_join () służy do odzyskania wszystkich zasobów podanych do wątków. W końcu do niszczenia obiektu zamka używana jest funkcja „pthread_mutex_destroy ()”. Nasz program kończy się tutaj.

Plik został skompilowany i nie mamy błędów. Po wykonaniu funkcja main () rozpoczęła się i utworzyła wątek 1.

Po pewnym czasie, z powodu blokady, wątek 1 zakończył wykonanie i zakończył. Następnie funkcja main () utworzyła wątek 2 i została uruchomiona.

Po całkowitym wykonaniu wątku 2 zamek został zakończony, a funkcja main () utworzyła ostatni wątek i.mi., 3r & D nitka.

Po całkowitym wykonaniu trzecie.

Przykład 02:

Miejmy kolejny przykład, aby zobaczyć działanie funkcji „pthread_mutex_lock ()”. Kod został uruchomiony z tym samym plikami nagłówka.

Po plikach nagłówka utworzyliśmy funkcję blokady Mutex. Pojawia się trzy funkcje. Dwie funkcje wątków i 1 to połączona funkcja. Thread1 i Thread2 przyjmują dane wejściowe z funkcji main () i.mi. Nić obiekty TH1 i TH2. Obie funkcje wątków wywołują metodę show () i przekazuje dwa ciągi w swoim parametrze. Kiedy rozpoczyna się funkcja „pokaż”, blokuje się za pomocą funkcji „pthread_mutex_lock ()” za pomocą obiektu Mutex Lock. Pierwsza instrukcja drukowania jest przyjmowanie pierwszego argumentu i wyświetla go. Następnie śpi przez 1 sekundę, a druga wartość argumentu zostanie wyświetlona za pomocą klauzuli drukowania. W ostatnim wierszu zamek został wydany za pomocą funkcji „pthread_mutex_unlock ()” przy użyciu obiektu zamka.

Funkcja main () rozpoczyna się od tworzenia dwóch obiektów dla wątków i.mi. TH1 i TH2. Dwa wątki zostały utworzone przez funkcję „pthread_create”, przekazując Th1 i Th2 w parametrach. Pętla „while” służy do po prostu biegania i nie kończącego się nawet przez sekundę. Tak więc program nadal się przetwarza.

Kod został najpierw skompilowany za pomocą kompilatora „GCC” w Ubuntu 20.04.

Kiedy kod został wykonany, metoda show () wywoływana przy użyciu Thread1 i Thread2 funkcjonują jeden po drugim. Program nie zatrzymał się po wykonaniu wątków. Musimy więc zatrzymać wykonanie mocno za pomocą skrótu „Ctrl+Z”.

Aby zapobiec przetwarzaniu systemu non-stop, musimy usunąć pętlę „while” z kodu w metodzie Main (). Wyrażenie powrotne 0 zostało zastąpione pętlą „while”.

Teraz ten program jest gotowy do skompilowania i wykonania. Więc skompilowaliśmy ten program z kompilatorem „GCC”. Następnie miało miejsce egzekucja. Możesz zobaczyć, że program został zakończony po wykonaniu dwóch wątków. Thread1 działał, a funkcja show () zablokowała się podczas wykonywania. Po wykonaniu sam się wypuścił, a Thread2 został wykonany. Funkcja „pokaż” jest wywoływana w niej i przekazała niektóre parametry. Funkcja „show ()” zablokowana i nie wydaje się, dopóki wykonanie nie zostanie wykonane, a funkcja mutex_lock nie zostanie wywołana. Następnie kontrola jest zwracana z powrotem do metody Main (), a program kończy się.

Wniosek

Chodziło o to, co możemy zrobić, abyś zrozumiał użycie funkcji pthread_mutex_lock w kodzie C. Wypróbowaliśmy dwa niezwykle różne programy, aby uczynić go zrozumiałym i wyjaśniliśmy oba przykłady dość krótko i po prostu. Jesteśmy dość optymistami, że ten artykuł będzie świetny dla każdego użytkownika C.