Możesz chcieć przekazać wiadomości między procesami w następujących okolicznościach: po zakończeniu zadania proces uruchomiony przez proces nadrzędny jest zakończony. Proces dziecka mógł prowadzić nieskończoną pętlę. Kiedy nastąpi awaria lub inne zdarzenie, takie jak impas, proces, który jest częścią grupy, musi zatrzymać lub sygnalizować inne procesy w grupie. Podczas koordynowania dwa procesy muszą zsynchronizować za pomocą tej funkcji. Na przykład jeden wątek może to wykorzystać, aby wpłynąć na sposób transmitowania sygnału do grupy innych wątków. Poniżej pokazano składnię funkcji pTHEAD_KILL (). Sygnał.H Plik nagłówka jest używany, ponieważ wszystkie te funkcje są zdefiniowane w tym pliku nagłówka.
#włączaćMetoda pthread zabójcy () sprawdzałaby błędy, czy wartość sygnału została ustawiona na 0, ale w rzeczywistości żaden sygnał nie został dostarczony do tej funkcji dla wątku. Funkcja zwraca zero, gdy zakończy swoją pracę. Jeśli nie, funkcja zwraca błąd numeryczny. Nie dostarczono sygnału, jeśli metoda pthread zabójcy () nie powiedzie się. Jeśli wystąpi którykolwiek z poniższych: żaden wątek nie można odkryć pasującego do jednego wskazanego przez dostarczony identyfikator wątku; Nieprawidłowy lub nieautoryzowany numer sygnału to wartość argumentu sygnału.
Utwórzmy plik programowania C, aby zrozumieć funkcję pthread_kill (). Korzystając z polecenia VIM, musimy utworzyć plik kodu i zapisać plik jako pthread_kill.C. Aby uzyskać pożądany wynik, wpisz kolejne polecenie na ekranie.
Oto fragment kodu; W pierwszych kilku wierszach kodu dołączyliśmy pliki nagłówka. Po prostu drukujemy wiadomość z wątku, który jest teraz uruchomiony w metodzie display_output. Zadeklarowaliśmy zmienną typu liczb całkowitych w głównej funkcji, aby wykryć status wątku. Zmienna NUM została zainicjowana, a metoda tworzenia wątków została przekazana. Pthread t służy do wyraźnej identyfikacji wątku. Następnie, stosując metodę PTHERED, wygenerowaliśmy wątek. W przypadku awarii sprawdź, czy ta metoda zwraca wartość mniejszą niż 0, co wskazywałoby, że proces tworzenia wątków nie powiódł się.
Następnie wątek jest spany przez dwie sekundy, nazywając metodę snu. Następnie wywołano procedurę zabijania pthread, a identyfikator wątku i sygnał Sigusr1 zostały przekazane do niej. Zastosowanie sygnałów SIGUSR1 i SIGUSR2 zależy od wymagań użytkownika. Jeśli zaimplementujesz dla nich obsługę sygnału w aplikacji, która odbiera sygnał, są one szczególnie pomocne podczas komunikacji między procesami. Następny wiersz wykonuje sprawdzenie warunkowe, które potwierdzi, czy proces zabijania wątków nie powiódł się i czy komunikat o błędzie został wydrukowany za pomocą instrukcji Perror. W przypadku sukcesu nazwieliśmy metodę pthread_join, która oferuje prosty mechanizm, który umożliwia aplikację czekanie na zakończenie wątku. Później sprawdziliśmy, czy ten proces nie wydrukował komunikatu o błędzie.
Zamknij edytor VIM po wprowadzeniu kodu, uderzając w klawisz Escape i polecenie: x. Skompiluj kod po tym za pomocą wybranego kompilatora C, upewniając się, że tworzy pożądany plik wyjściowy. Aby zbudować kod, wpisz poniższe polecenia. Wszelkie błędy zostaną wyświetlone na ekranie końcowym, jeśli wystąpią. Nic nie pojawi się na ekranie po udanej kompilacji.
Uruchom plik wyjściowy, aby zobaczyć komunikat wykonujący wątek, wskazując, że nie było błędów po wywołaniu wątku, aby zabić funkcję i że wszystko poszło gładko od tworzenia wątków przez zabijanie wątków do funkcji łączenia wątku. Aby uzyskać pożądany wynik, wpisz kolejne polecenie na ekranie.
Dokonajmy pewnych zmian w kodzie, więc wpisz polecenie VIM wraz z nazwą pliku C. Aby uzyskać pożądany wynik, wpisz kolejne polecenie na ekranie.
Instrukcja warunkowa po modyfikacji metody łączenia wątku, w której sprawdziliśmy, czy metoda połączenia wątku ustawiła zmienną stanu wątku na większą lub równą 1, wskazując na udaną operację, jest nieobecne w poniższych wierszach kodu. Jeśli to się powiedzie, wyświetlimy komunikat na ekranie, który mówi: „Wątek dołączający do udanego.". Kolejną niewielką zmianą w kodzie jest to, że funkcja Thread_Kill jest teraz umieszczana po instrukcji warunkowej Funkcji Throin. Oznacza to, że komunikacja między procesami odbędzie się teraz po funkcji Thread_Join.
Aby zaktualizować plik wyjściowy, ponownie skompiluj kod. To polecenie skompiluje plik C zawierający kod wątku. Aby uzyskać pożądany wynik, wpisz kolejne polecenie na ekranie.
Uruchom kod teraz, a zobaczysz, że pomyślnie wydrukował metodę łączenia wątku na ekranie. Wykonanie wątku jest wyświetlane przed wywołaniem funkcji wyświetlania wyjściowego. Aby uzyskać pożądany wynik, wpisz kolejne polecenie na ekranie.
Wniosek
Chodzi o demonstrację funkcji pthread_kill () C, aby poprosić o skierowanie sygnału do wybranego wątku. Omówiliśmy szczegółowy przykład C przy użyciu funkcji pthread_kill w nim, aby wysłać sygnał do konkretnej metody, jeśli chodzi o zakończenie funkcji wywołania. Chodzi o pthread_kill. Mam nadzieję że ci się spodoba.