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.