Hvordan du bruker multithreading i C ++

Hvordan du bruker multithreading i C ++

Multithreading er konseptet med å kjøre flere utførelsestråder i et enkelt program. Det er en veldig nyttig funksjon i programmeringsspråk som C ++, da det gjør oss i stand til å utføre flere operasjoner samtidig. I c++, Multithreading kan oppnås via Bibliotek, som gir et sett med klasser og funksjoner som lar utviklere lage, administrere og kontrollere flere tråder.

Multithreading er akkurat som multitasking. Det betyr at to eller flere tråder kjører samtidig. I et slikt program blir hver komponent referert til som en tråd, og hver tråd spesifiserer en unik utførelsesbane. Det er ingen innebygd støtte for Multithreaded programmer før C ++ 11. Denne funksjonen er i stedet fullstendig levert av operativsystemet.

Multithreading kan også omtales et program i mindre tråder som utfører samtidig. Trådklassen, som brukes til Multithreading I C ++, lar deg konstruere mange tråder og administrere utførelsen.

Lag tråder i C++

For å lage en tråd i C ++, bruker vi std :: tråd klasse, som er inkludert i det innebygde trådbiblioteket. EN Kallbar blir levert som et argument til konstruktøren av et objekt i klassen std :: tråd For å generere en ny tråd. Kode som utføres når en tråd er aktiv er kjent som Kallbar. Når vi konstruerer en std :: tråd objekt, er en ny tråd etablert, som forårsaker koden levert av Kallbar å bli kjørt. Kallbar kan defineres ved hjelp av disse tre metodene.

Metode 1: Funksjonspeker

Kallbar Funksjoner som bruker en funksjonspeker kan defineres slik.

void funksjon_call (parametere)

Når funksjonen er konstruert, genereres et trådobjekt som inneholder funksjonen som følger:

std :: tråd tråd_obj (funksjon_call, parametere);

Metode 2: Funksjonsobjekt

Mens vi bruker funksjonsobjektet, utnytter vi ideen om overbelastning av operatøren. Koden som må kjøres mens tråden dannes, er inneholdt i den overbelastede funksjonen.

klasse objekt_class
void operatør () (parametere)

// kode som skal utføres

;
std :: tråd tråd_objekt (object_class (), parametere)

Metode 3: Lambda -uttrykk

Kallbar Funksjoner ved bruk av et lambda -uttrykk kan defineres slik.

auto f = [] (parametere)
// kode som skal utføres
;
std :: tråd tråd_objekt (f, parametere);

Eksempel på multithreading i C++

#inkludere
#inkludere
ved hjelp av navneområdet STD;
void func_thread (int n)

for (int i = 0; i < N; i++)
cout << "Thread 1 :: callable => Ved hjelp av en funksjonspeker \ n ";


Klassetråd_obj
offentlig:
void operator () (int n)
for (int i = 0; i < n; i++)
cout << "Thread 2 :: callable => Ved hjelp av et funksjonsobjekt \ n ";

;
int main ()

auto f = [] (int n)
for (int i = 0; i < n; i++)
cout << "Thread 3 :: callable => Ved hjelp av et lambda -uttrykk \ n ";
;
Tråd Th1 (func_thread, 2);
tråd Th2 (tråd_obj (), 2);
tråd Th3 (F, 2);
Th1.bli med();
Th2.bli med();
Th3.bli med();
retur 0;

I koden ovenfor har vi utviklet tre tråder med tre separate Callables-en funksjonspeker, et objekt og et lambda -uttrykk. Hver tråd startes som to separate forekomster. Tre tråder er aktive samtidig og separat, som indikert i utgangen.

Produksjon

Fordeler og ulemper ved multitReading

Mer arbeid kan gjøres raskere takket være Multithreading. Dette er fordi det lar mange tråder utføre forskjellige oppgaver samtidig. Multithreading lar programmerere gjøre nettverksaktiviteter, behandle bilder eller videoer og utføre kompliserte beregninger uten å bremse resten av applikasjonen. Multithreading hjelper med å gjøre brukergrensesnitt mer responsive. Ved å kjøre koden som endrer skjermen i en egen tråd, holdes UI -tråden fri til å utføre andre oppgaver, for eksempel å svare på brukerinngang. Dette resulterer i jevnere og raskere brukergrensesnitt.

Imidlertid er det noen begrensninger å bruke Multithreading. En av de viktigste utfordringene når du jobber med Multithreaded Programmer unngår raseforhold. En løpsbetingelse er en situasjon der to eller flere tråder prøver å få tilgang til den samme delte ressursen samtidig, noe som fører til uforutsigbar oppførsel. For å unngå raseforhold bruker utviklere synkroniseringsteknikker som mutexes, semaforer og barrierer.

Konklusjon

Multithreading I C ++ er et kraftig konsept som lar utviklere lage programmer som kan utføre flere oppgaver samtidig. Ved å bruke trådklassen levert av biblioteket, kan utviklere opprette, administrere og kontrollere flere tråder. Multithreading kan brukes til å forbedre ytelsen, øke responsen og overvinne systemets ressursbegrensninger. På grunn av utfordringene som er involvert i å jobbe med Multithreaded Programmer, utviklere må være forsiktige og bruke passende synkroniseringsteknikker for å unngå raseforhold.