Przykład 01:
Miejmy pierwszy przykład, aby zobaczyć działanie funkcji pthread_detach. Zacznij od terminalu od uruchomienia go, ja.mi., Ctrl+alt+t. Będziemy używać określonych poleceń do utworzenia pliku C, otwierania i wykonania. Pierwszym poleceniem jest wygenerowanie z nim nowego pliku, ja.mi., dotykać. Ten nowy plik musi otworzyć w takim edytorze, w którym możemy dodać do niego kod i wprowadzić do niego zmiany. Używamy tutaj edytora „Nano” za pośrednictwem jego polecenia.
Rozpoczęliśmy implementację pierwszego przykładu z niektórymi plikami nagłówka, które są potrzebne do uruchomienia tego kodu. Nasz kod zawiera dwie funkcje zdefiniowane przez użytkownika i metodę 1 main (). Ponieważ wykonanie zawsze zaczyna się od metody Main (), rozpoczynamy również wyjaśnienie z Main (). Funkcja main () nazywa się metodą „Createt” w pierwszym wierszu. Teraz kontrola jest przekazywana funkcji „Createt”. Ta funkcja tworzy obiekt „TH” dla uzyskania identyfikatora wątku za pomocą wbudowanego zmiennego. Instrukcja PrintF pokazuje, że jesteśmy obecnie w głównym wątku lub 1St funkcjonować.
Do utworzenia nowego wątku w tej funkcji używana jest funkcja „pthread_create”.mi., Nowe i wiążące zmienną „th”, aby odwołać się do identyfikatora. Oświadczenie „jeśli” jest wykorzystywane do sprawdzenia, czy ta funkcja main () i inne nowo utworzone wątki są równe, czy nie. Dokonano tego poprzez zrównanie identyfikatorów obu wątków. Zmienne odniesienie „th” do nowego wątku i pthread_self () zwraca identyfikator funkcji „Createt”. Jeśli oba wątki pasują, wydrukuje „wątki są takie same”; W przeciwnym razie „wątki nie są takie same.„Funkcja pthread_join () zapewnia, że wykonanie głównego wątku zostanie zakończone do momentu wykonania nowego wątku i nie zakończenia. Teraz kontrola jest całkowicie zakończona nowym wątkiem.
W nowym wątku używana jest funkcja snu. Tak więc system będzie spał przez 10 sekund, a potem nastąpi dalsze wykonanie. Funkcja pthread_detal () jest tutaj, aby całkowicie odłączyć nowy wątek od funkcji wywołania, i.mi., „Createt.„Tutaj pthread_self () służy do znalezienia identyfikatora„ nowego wątku ”do odłączenia. Instrukcja PrintF wyświetli, że ten wątek funkcji wyjdzie teraz. System będzie spał przez następne 10 sekund ponownie przy użyciu tej samej metody „sleep ()”. Funkcja pthread_exit () jest tutaj, aby szybko zakończyć bieżący wątek, który jest teraz „Nowy.„Teraz kontrola jest zwrócona do funkcji„ Createt ”. Po powrocie do tego głównego wątku napotkaliśmy nową instrukcję PrintF, aby wyświetlić, że wróciliśmy w funkcji „Createt”. Teraz musimy użyć innej funkcji pthread_exit (), aby zamknąć również wątek „Createt” i zwrócić kontrolę funkcji Main (). Więc zrobiliśmy to do tej pory, a kontrola jest zwrócona. Tutaj program się kończy. Po zakończeniu programu musimy skompilować go z kompilatorem C na Ubuntu 20.04.
Musisz upewnić się, że kompilator C jest już skonfigurowany na komputerze końcowym. Wykorzystaliśmy kompilator GCC w naszej skorupce. Tak więc nazwa pliku ze słowem kluczowym „-lpthread” służy do kompilacji kodu zgodnie z poniższym obrazem.
Po skompilowaniu kodu musimy go wykonać, aby zobaczyć dane wyjściowe. Polecenie wykonania to „./A.out ”jak poniżej. Kiedy wykonaliśmy plik kodu, rozpoczął funkcję główną i funkcję main () o nazwie funkcja „CreateT”. Instrukcja PrintF „Createet” wyświetlona „Inside MAIN WIRN” i utworzyła nowy wątek o nazwie nowy. Dokonano porównania obu wątków i zwraca oba wątki nie są takie same. Następnie system śpi przez 10 sekund.
Po 10 sekundach dołącza do utworzonego wątku nowego. Nowy wątek został oderwany od funkcji „Createt” i wyświetlony, że jesteśmy w funkcji „nowej” wątku. System znów śpi przez następne 10 sekund i wychodzi z nowego wątku.
Teraz kontrola jest zakończona wątkiem „Createt” i wybiegła, że wróciliśmy do głównego wątku. Po zakończeniu wątku „Createt” funkcja main () została podana kontrola. Stąd program kończy się tutaj pomyślnie.
Przykład 02:
Spójrzmy zupełnie inaczej na przykład funkcji pthread_detach w c. Rozpoczęliśmy nasz kod C z tymi samymi nagłówkami biblioteki z słowem kluczowym #Include, aby nasz kod będzie działał. 1 funkcja main () i 1 funkcja zdefiniowana przez użytkownika o nazwie „Nowa” jest zdefiniowana. Funkcja „nowa” będzie używana jako funkcje wątków. Rozpoczynamy wyjaśnienie od metody main (). PTTHEAD_T MUTABLE deklaruje zmienną „th” do uzyskania identyfikatora wątku nowego wątku. Instrukcja PrintF pokazuje, że założyliśmy główną funkcję i wynosi 10 sekund za pomocą metody „Sleep”. Kolejne wydruk wyświetla się, że zostanie utworzona funkcja wątku, a z tego powodu używana jest funkcja PTHERED_CREATE () POSIX.
„TH” jest używany jako parametr nowej funkcji tworzenia wątku, aby uzyskać identyfikator nowego wątku. Funkcja pthread_join () jest tutaj, aby całkowicie zawiesić wykonanie metody main () do nowego wątku, i.mi., Nowy, wykonuje. Teraz nowa funkcja jest uruchamiana. Funkcja pthread_detal () jest tutaj, aby całkowicie odłączyć tę funkcję od funkcji Main (. Funkcja pthread_exit () zapewni, że nowy wątek nie zostanie już wykonywany. Dlatego jego instrukcja PrintF nie zostanie wykonana. Wątek main () zostanie zakończony po wykonaniu funkcji pthread_exit ().
Zacznijmy od kompilacji kodu z GCC. Na szczęście! To się udało.
Więc wykorzystaliśmy to samo ”./A.OUT „INSTRUKCJA TUTAJ TUTAJ. Funkcja main () rozpoczęła się najpierw wykonywać jako wyjścia instrukcji drukowania. Teraz system śpi przez 10 sekund.
Po 10 sekundach wykonana jest kolejna instrukcja drukowania i wyświetlana, że tworzy się nowy wątek. Kontrola jest zakończona nowym wątkiem i jest odłączona od funkcji main () bez wykonywania instrukcji printf. Dlatego nasze wyjście jest coś takiego jak poniżej.
Wniosek:
Tak więc chodziło o użycie funkcji PTHREAD_DETACH Posix w C, aby całkowicie odłączyć wątek od głównego wątku wywołania. Utrzymując to dość proste i krótko wyjaśniając ilustracje, staraliśmy się, abyś zrozumiał te przykłady zaimplementowane w Ubuntu 20.04.