Funkcja pthread_exit 3 c

Funkcja pthread_exit 3 c
„Być może przeszedłeś wiele funkcji POSIX C podczas korzystania z dowolnego systemu operacyjnego Linux. Funkcja pthread_exit () jest jedną z tych funkcji POSIX. Pthread_exit () jest wykorzystywany do zakończenia wykonywania wątku wywołania. Wątek wywołujący jest zakończony za pomocą funkcji pthread_exit (), a jej wykonanie jest zawieszone za pomocą funkcji pthread_join (), dopóki wątek docelowy nie zakończy wykonania. Zatem kończy wątek wywołujący i wysyła status do dowolnego wątku, który używa identyfikatora wątku wątku terminacyjnego, aby wywołać pthread_join (). W tym samouczku przyjrzymy się wykorzystaniu funkcji pthread_kill w c."

Po pierwsze, musisz zalogować się z systemu Linux i uruchomić terminal. W skorcie spróbuj utworzyć plik C za pomocą edytora vim i nazwij go pthread_kill.C. Po otwarciu w edytorze VIM w trybie Insert, napisz w nim poniższe wiersze kodu.

Niezbędne pliki nagłówka są włączone do pierwszych trzech wierszy kodu, a następnie nagłówek funkcji dla funkcji wiadomości wyświetlania, która akceptuje wskaźnik pustki, jest deklarowany. Następnie utwórz zmienną globalną i ustaw jej wartość na 0. Zadeklarowane są dwie zmienne typu pthread_t o nazwie Thread_P i Thread_S. Pthread_t to typ danych używany do identyfikacji wątku utworzonego w głównej funkcji. Gdy program wykonuje wywołania funkcji, które wywołują identyfikację wątku, przyjmuje wartość zwróconą przez funkcję pthread_create ().

Dwie zmienne wskaźników typu znaków, które są używane do przechowywania wiadomości dla wątków pierwotnych i wtórnych, są zdefiniowane w poniższych wierszach kodu. Następnie zdefiniowano dwie liczby całkowite, z wartościami odpowiednio 100 i 200. Następnie stworzyliśmy dwa osobne wątki, z których każdy używa metody wyświetlania wiadomości. Wyślij indywidualnie generowane identyfikatory i wiadomości wątków do każdego wątku osobno; Po tym wydruku wywoływane jest instrukcja, która jest przesłaniem przed zakończeniem wątków. Po wyjściu lub zakończeniu wątków wszystkie wykonanie jest zawieszone i nie zostanie wyświetlone wyjście. Zmienna globalna jest zwiększana o 1 w funkcji wiadomości wyświetlania.

Zobacz dostępne pliki i foldery w katalogu roboczym, wprowadzając polecenie LS w wierszu poleceń terminalu.

Wprowadź poniższe polecenia, aby zbudować plik zawierający instrukcje związane z wątkiem, ponieważ różnią się od standardowych instrukcji kompilacji. Polecenie jest inicjowane z kompilatorem, ponieważ używamy kompilatora GCC i systemu operacyjnego Linux. Następnie stosuje się przełącznik -pthread. Po określaniu nazwy pliku z flagą -O plik wyjściowy zostanie utworzony z żądaną nazwą.

Po prostu wprowadź polecenie (./PTHREAD KILL.Out) w terminalu, aby uruchomić plik wyjściowy i wyświetlić wyniki. Żadna instrukcja nie zostanie wykonana po instrukcji przed poprzednim, ponieważ oba wątki zostaną zakończone za pomocą funkcji pthread_exit. Gdy tylko ustalono wątek podstawowy, wywołuje metodę wyświetlania wiadomości, zwiększając wartość zmiennej globalnej od 0 do 1, która jest następnie wyświetlana. Podobnie do tego, następnie wywoływany jest drugi wątek, który wyświetla wartość zmiennej globalnej po przyrostu, co daje wartość 2.

Teraz utwórz kolejny plik kodu programowania C za pomocą edytora VIM i zapisz w nim kod. Nazwa pliku to pthread_exit.C.

Ważne pliki nagłówka są włączone do pierwszych dwóch wierszy pliku kodu. Z tego ogłoszono zmienną globalną, a jej wartość ustawiono na 0. Następnie jest zapisana funkcja wyświetlania i podaje się parametr wskaźnika pustki. Wszystkie wątki, które tworzymy w naszej głównej funkcji, wykonają ten kod. Wartość argumentu zmiennej wątku jest przechowywana w pierwszym wierszu funkcji. Teraz, gdy zmienna statyczna została zdefiniowana i ustawiona na 0, jej wartość zostanie zmodyfikowana w ramach funkcji. Następnie wydrukowaliśmy identyfikator wątku i wartości zmiennych globalnych i statycznych po ich zwiększeniu.

Użyj kompilatora GCC, aby skompilować kod C z opcją -pthread, a następnie zapisz wyjście wyjścia pthread.plik. Tylko jeden wątek może zakończyć wykonanie, ponieważ używamy tego samego identyfikatora wątku do wygenerowania kilku wątków, a następnie wyjść z wątku w pętli.

Oto wyjście pliku po udanej kompilacji. Oznacza to, że jeśli jakikolwiek wątek zostanie zakończony za pomocą instrukcji wyjścia, żaden inny wątek nie zostanie wykonany.

Każdy wątek jest generowany i wykonywany poprawnie, jeśli nieznacznie zmodyfikujemy kod, zmieniając instrukcję wyjścia i przesuwając linię poza pętlę. To jest kawałek kodu podany w fragmencie poniżej:

Po kompilacji i po wykonaniu pliku wyjściowego zostanie wygenerowane poniższe wyjście, co pokazuje, że wszystkie wątki zakończyły ich wykonanie. Dane wyjściowe pokazuje, że wartości zmiennych globalnych i statycznych są takie same dla wszystkich wątków, co oznacza, że ​​używane jest to samo odniesienie wątku.

Zmieńmy nasz kod trochę więcej i skomentuj instrukcję pthread_exit na końcu funkcji wyświetlania. Oto ekran kodu:

Oto zrzut ekranu wyjściowego powyższego kodu. Wykonane są tylko trzy wątki; Możesz zobaczyć wartości zmiennych globalnych i statycznych. Drugi i trzeci wątek mają te same wartości dla obu.

Wniosek

W tym artykule dotyczy użycia funkcji pthread_kill w C do zakończenia przetwarzania wątku wywoławczego w programie, ale proces zakończenia funkcji wywołania musi zostać zatrzymany na chwilę przy użyciu metody pthread_join ( znakomity. Możesz skorzystać z prostych przykładów wykazanych powyżej, aby uzyskać jasne zrozumienie.