Rodzaje wątków
Szczególny strumień serii procesu jest określany jako wątek. Wątki są oznaczone jako niezbędne procedury, ponieważ są one podobne do procesów na wiele sposobów. Chociaż wątki są obsługiwane sekwencyjnie, wydaje się, że działają jednocześnie. Istnieją różne stany dla każdego wątku.
Zasadniczo procesy to programy wysyłane ze stanu gotowego i zaplanowane do wykonania w procesorze. Koncepcja procesu jest przechowywana przez PCB (blok kontroli procesu). Proces może wytworzyć coś, co nazywa się „procesami dziecięcymi” lub nowych procesów. Proces trwa dłużej, ponieważ jest izolowany, co oznacza, że nie udostępnia pamięci z żadnymi innymi procesami. Każdy z poniższych stanów procesu może być obecny: nowy, gotowy, uruchamiany, czekający, zakończony lub zawieszony.
Wątki
Wątek jest modułem procesu. Proces może mieć kilka wątków, a wszystkie te wątki są zawarte w metodzie. Istnieją trzy stany dla wątku: Uruchomienie, gotowe i zablokowane. Wątek kończy się szybciej niż proces, ale nie izoluje się tak, jak proces.
Wspólne cechy między wątkami a procesami obejmują
Rozróżnienia między procesami a wątkiem
Wątek na poziomie użytkownika
Jest w praktyce w bibliotece na poziomie użytkownika; Wezwania systemowe nie są używane do ich konstruowania. Przełączanie wątków nie wymaga połączenia systemu operacyjnego ani przerwania jądra. Jądro zarządza nimi tak, jakby były procesami jednoosobowymi, ponieważ nie jest świadome wątku na poziomie użytkownika.
Korzyści
Wątek na poziomie jądra
Wątki są zarządzane przez jądro. Ponadto jądro śledzi również procesy za pomocą konwencjonalnej tabeli procesów. Kernel OS ma wezwania systemowe do zarządzania i tworzenia wątków.
Korzyści
Inną nazwą wątku jest lekki proces. Przebijając proces na kilka wątków, należy osiągnąć równoległość. Na przykład wiele kart w przeglądarce może reprezentować różne wątki. Wiele wątków jest używanych przez MS Word, w tym jeden do przetwarzania wejść, a drugi do formatowania tekstu.
Wątek klasowy odnosi się do konkretnego wątku implementacji. W C ++ termin „klasa wątków” odnosi się do klasy STD ::. Po utworzeniu obiektu połączonych wątków, metodą najwyższego poziomu, która została dostarczona jako część umowy konstruktora funkcji. Kod implementacyjny, który musi zostać wywołany, odbędzie nowy obiekt wątku, który został utworzony, aby uruchomić wątek.
Jak powiedziano wcześniej, STD :: Wątek jest wymagany, aby rozpocząć nowy wątek, a wątek musi być również możliwy do nazywania. Zwolenie to program, który należy uruchomić, gdy wątek jest aktywny. Innymi słowy, jeśli wymagany jest nowy wątek, należy dostarczyć do konstruktora obiektu dla std ::. Następnie rozpoczyna się nowo wygenerowany wątek i uruchomiona jest funkcja dostarczona.
Główne rozróżnienie polega na tym, że podczas gdy procesy działają w różnych obszarach pamięci, wątki w jednym procesie współużytkowana przestrzeń pamięci. Ponieważ wątki nie są od siebie całkowicie niezależne, takie jak procesy, udostępniają swoje zasoby systemu operacyjnego, sekcję kodu i sekcją danych z innymi wątkami.
Funkcja wątku w C++
W systemie operacyjnym dostarczają (wątek POSIX) dla funkcji, funkcje związane z funkcjami. W ten sposób możemy zrobić wiele wątków do obsługi współbieżnego przepływu procesu. Działa najlepiej w systemach z kilkoma procesorami lub rdzeniami, w których szybkość wykonania można osiągnąć, wdrażając wątki na poziomie jądra. Zyski można również osiągnąć w systemach z jednym procesorem, korzystając z IO lub innych usług systemowych, które mają tendencję do zatrzymywania procesów.
Utwórz funkcję ()
pthread_create: Nowy wątek Utwórz
Parametry
Funkcja exit ()
pthread_exit: używany do przestania używać wątku
Parametry
Ujawnij, wskaźnik całkowitej liczby całkowitej zawierającej status powrotu wątku jest wymaganym parametrem dla tej procedury. Każdy wątek czekający na dołączenie do tego wątku musi być w stanie wyświetlić status powrotu, ponieważ zakres tej zmiennej musi być globalny.
Funkcja łączenia ()
pthread_join: używane do wyjścia z oczekiwania wątku
Parametry
Equal () funkcja
pthread_equal: Określa, czy dwa wątki są podobne. Funkcja zwraca liczbę niezerową, jeśli dwa wątki są równe, w przeciwnym razie zero.
ST :: Tworzenie wątków
W C ++ wątki są budowane przy użyciu klasy STD ::. Wątek jest unikalnym przepływem wykonania; Jest podobny do posiadania pomocnika, kończąc jedno zadanie, gdy kończysz kolejny jednocześnie. Po wykonaniu całego kodu wątku, zatrzymuje się. Podczas ustanawiania wątku należy przekazać coś, aby wykonać na nim. Obiekty wymienione poniżej można przekazać do wątku.
Typy członków
ID: ID wątku (publiczny)
Norty_handle_type: indement_handle_type (publiczne)
Wątek umożliwia jednoczesne wykonywanie wielu zadań. W C ++ termin „klasa wątków” odnosi się do klasy STD ::. Nowy obiekt wątku musi zostać wygenerowany, aby uruchomić wątek i musi być dostarczony do kodu wykonywania, który należy wywołać. Metodą najwyższego poziomu, która została dostarczona jako część umowy konstruktora funkcji, jest miejsce, w którym wykonanie wątku rozpoczyna się po utworzeniu obiektu połączonego wątku.
Przy użyciu obiektu przy użyciu
Obiekt może być wyświetlany, używając tej metody. W tym celu wymagana jest klasa, a operator () musi zostać przeciążony w tej klasie. Oprogramowanie, które musi działać po utworzeniu wątku, jest zawarte w przeciążonych metodach.
Przywoływając się do wskaźnika
Wskaźnik zostanie uznany za pomocą tej metody. W obiekcie wątku lista parametrów lub argumentów wysłanych do metody pojawia się obok nazwy funkcji.
Przy użyciu wskaźnika funkcji
Dawanie go do obiektu wątku do wykonania osiąga pożądany wynik. Konstruktor funkcji obiektu wątku odbiera wyrażenie Lambda o nazwie „LM” jako swój pierwszy argument przed otrzymaniem jego argumentów jako drugiego argumentu.
Omówmy różne przykłady funkcji STD ::.
Przykład 1
W tym przypadku użyjemy wątku z wskaźnikiem.
#włączać
#włączać
Test klasowy
publiczny:
void execute (std :: polecenie string)
dla (int i = 0; i < 8; i++)
STD :: Cout<
;
int main ()
Test * testPtr = nowy test ();
std :: wątek th (& test :: execute, testPtr, „wartości”);
th.dołączyć();
Usuń testPtr;
powrót 0;
Po pierwsze, dołączamy pliki nagłówków i w programie. Tworzymy klasę i określamy jego nazwę „test”. Następnie wykorzystujemy metodę publiczną i wykonujemy polecenie ciągu. Po wykonaniu polecenia ciągów będziemy ubiegać się o pętlę i przyrost (0 do 8). Tutaj stosujemy oświadczenie „cout”. Następnie nazywamy funkcję main (). Wraz z tym nazywamy klasą „testem” i używamy w nim wskaźnika. Następnie wątek mija wskaźnik. Następnie używamy funkcji Join (), usuwamy wskaźnik testowy i wprowadź „zwróć 0”.
Przykład 2
W takim przypadku użyjemy wątku bez wskaźnika.
#włączać
#włączać
Nazwa klasy
publiczny:
Statyczny test pustki (STD :: String Command)
dla (int i = 0; i < 3; i++)
STD :: Cout<
;
int main ()
STD :: Wątek TH (& Name :: Test, „Nazwa”);
th.dołączyć();
powrót 0;
Użyj plików nagłówka i . Utwórz klasę, a tytuł klasy to „Nazwa”. Korzystamy z metody publicznej, a następny wiersz używa funkcji statycznej członka i tutaj przekazujemy ciąg. Użyj pętli „dla”, a następnie zainicjuj wartości od 0 do 3. Oświadczenie „cout” jest używane do przedstawienia wartości. W następnym wierszu wywołujemy funkcję main (), używamy wątku i przekazujemy wartości bez użycia wskaźnika. Następnie używamy funkcji Join () i wprowadzamy „zwróć 0”.
Przykład 3
Tutaj zastosujemy operator void.
#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasowe laboratorium
publiczny:
void operator () (int a)
dla (int i = 0; i < a; i++)
Cout << "Number of threads :" << i << "\n";
;
int main ()
Wątek T2 (lab (), 6);
T2.dołączyć();
powrót 0;
W tym kodzie integrujemy wymagane pliki nagłówka , . Wykorzystujemy standardową przestrzeń nazw jako STD. Dodajemy klasę o nazwie „Lab” i używamy jej metody publicznej. Następnie zastosuj operatora pustki i zainicjuj w nim zmienną „A”. Tutaj zastosujemy „for Loop od 0 do wartości zmiennej„ A ”. Ponadto wydrukujemy instrukcję „liczbę wątków” za pomocą instrukcji „Cout”. Wzywamy funkcję main (). W tym wątku posiadająca wartość 6 zostanie zadeklarowana. Gdy wątek otrzyma połączenie, wykonuje kod i wyświetla wiadomość na ekranie.
Wniosek
W tym przewodniku rozmawialiśmy o wątku w funkcjach C ++. Następnie obserwujemy różne funkcje wątku w C++. Zdefiniowaliśmy wątek, a także jego typy. Wspominaliśmy również różne parametry wątku. Wykonaliśmy wiele rodzajów kodów. W pierwszym kodzie użyliśmy wątku z wskaźnikiem, jest to niestatyczna funkcja członka. Po drugie, w kodzie używamy wątku bez wskaźnika, jest to statyczna funkcja członka. Trzeci i ostatni kod, użyliśmy operatora void, a kiedy wątek otrzymał wartość, wyświetlała wiadomość na ekranie.