Jak używać multitreading w C ++

Jak używać multitreading w C ++

Multitreading to koncepcja uruchamiania wielu wątków wykonania w jednym programie. Jest to bardzo przydatna funkcja w językach programowania, takich jak C ++, ponieważ pozwala nam jednocześnie przeprowadzać wiele operacji. W c++, Multitreading można osiągnąć za pośrednictwem Biblioteka, która zapewnia zestaw klas i funkcji, które pozwalają programistom tworzyć, zarządzać i kontrolować wiele wątków.

Multitreading jest jak wielozadaniowość. Oznacza to, że dwa lub więcej wątków działa jednocześnie. W takim programie każdy komponent jest określany jako wątek, a każdy wątek określa unikalną ścieżkę wykonania. Nie ma wbudowanego wsparcia wielowy programy przed C ++ 11. Ta funkcja jest całkowicie dostarczana przez system operacyjny.

Multitreading można również nazwać podzieleniem programu na mniejsze wątki, które wykonują jednocześnie. Klasa wątków, która jest używana Multitreading W C ++ umożliwia konstruowanie wielu wątków i zarządzanie ich wykonaniem.

Utwórz wątki w C++

Aby utworzyć wątek w C ++, używamy STD :: Wątek klasa, która jest zawarta w wbudowanej bibliotece wątków. A możliwe do wywołania jest dostarczany jako argument dla konstruktora obiektu klasy STD :: Wątek Aby wygenerować nowy wątek. Kod wykonywany, gdy wątek jest aktywny, jest znany jako możliwe do wywołania. Kiedy budujemy STD :: Wątek Obiekt, ustanowiony nowy wątek, który powoduje kod dostarczany przez możliwe do wywołania do uruchomienia. Możliwe do wywołania można zdefiniować przy użyciu tych trzech metod.

Metoda 1: Wskaźnik funkcji

Możliwe do wywołania Funkcje za pomocą wskaźnika funkcji można zdefiniować w ten sposób.

void funkcja_call (parametry)

Po skonstruowaniu funkcji obiekt wątku zawierający funkcję jest generowany w następujący sposób:

std :: Thread wątpt_obj (funkcja_call, parametry);

Metoda 2: Obiekt funkcji

Korzystając z obiektu funkcyjnego, wykorzystujemy ideę przeciążenia operatora. Kod, który należy uruchomić podczas tworzenia wątku, jest zawarty w funkcji przeciążonej.

klasa Object_Class
void operator () (parametry)

// kod do wykonania

;
STD :: Thread_Object (Object_class (), parametry)

Metoda 3: Wyrażenie lambda

Możliwe do wywołania Funkcje za pomocą wyrażenia lambda można zdefiniować w ten sposób.

auto f = [] (parametry)
// kod do wykonania
;
STD :: Thread_Object (f, parametry);

Przykład multitreading w C++

#włączać
#włączać
za pomocą przestrzeni nazw Std;
void func_thread (int n)

dla (int i = 0; i < N; i++)
Cout << "Thread 1 :: callable => Za pomocą wskaźnika funkcji \ n ”;


klasa Thread_Obj
publiczny:
void operator () (int n)
dla (int i = 0; i < n; i++)
Cout << "Thread 2 :: callable => Za pomocą obiektu funkcyjnego \ n ”;

;
int main ()

auto f = [] (int n)
dla (int i = 0; i < n; i++)
Cout << "Thread 3 :: callable => Używając wyrażenia lambda \ n ”;
;
Wątek TH1 (func_thread, 2);
Wątek TH2 (Thread_Obj (), 2);
Wątek TH3 (f, 2);
Th1.dołączyć();
th2.dołączyć();
TH3.dołączyć();
powrót 0;

W powyższym kodzie opracowaliśmy trzy wątki z trzema osobnymi Odwołane-wskaźnik funkcji, obiekt i wyrażenie lambda. Każdy wątek jest uruchamiany jako dwie osobne instancje. Trzy wątki są aktywne jednocześnie i osobno, jak wskazano na wyjściu.

Wyjście

Zalety i wady wielowy

Więcej pracy można wykonać szybciej dzięki Multitreading. Dzieje się tak, ponieważ pozwala licznym wątkom wykonywać różne zadania jednocześnie. Multitreading umożliwia programistom wykonywanie działań sieciowych, przetwarzania zdjęć lub filmów i wykonywania skomplikowanych obliczeń bez spowolnienia reszty aplikacji. Multitreading pomaga w zwiększaniu reakcji interfejsów użytkowników. Uruchamiając kod, który zmienia ekran w osobnym wątku, wątek interfejsu użytkownika jest bezpłatny do wykonywania innych zadań, takich jak odpowiedź na wejście użytkownika. Powoduje to gładsze i szybsze interfejsy użytkownika.

Istnieją jednak pewne ograniczenia korzystania z Multitreading. Jedno z kluczowych wyzwań podczas pracy z wielowy Programy unika warunków wyścigowych. Warunek wyścigu to sytuacja, w której dwa lub więcej wątków próbuje jednocześnie uzyskać dostęp do tego samego wspólnego zasobu, co prowadzi do nieprzewidywalnego zachowania. Aby uniknąć warunków rasowych, programiści stosują techniki synchronizacji, takie jak muteksy, semafory i bariery.

Wniosek

Multitreading W C ++ to potężna koncepcja, która pozwala programistom tworzyć programy, które mogą wykonywać wiele zadań jednocześnie. Korzystając z klasy wątków dostarczonej przez bibliotekę, programiści mogą tworzyć, zarządzać i kontrolować wiele wątków. Multitreading może być użyte do poprawy wydajności, zwiększenia reaktywności i przezwyciężenia ograniczeń zasobów systemowych. Jednak ze względu na wyzwania związane z pracą z wielowy Programy, programiści muszą zachować ostrożność i stosować odpowiednie techniki synchronizacji, aby uniknąć warunków rasowych.