Hvordan implementere multithreading i C++

Hvordan Implementere Multithreading I C



Multithreading i C++ er en funksjon som lar en utføre flere oppgaver samtidig samtidig. En tråd er arbeidsenheten til en bestemt prosess som utføres. Tallrike tråder kjøres uavhengig av hverandre samtidig for å utføre multithreading.

Hvordan implementere multithreading i C++

Et flertrådsprogram har to eller flere deler som har en tendens til å kjøre samtidig, hver del er kjent som en tråd og har en annen bane for utførelse. Tallrike tråder kjøres uavhengig av hverandre samtidig for å utføre multithreading.







Forutsetninger for multithreading i C++

På Windows kan funksjoner relatert til tråder utføres i C++ 11 og avanserte versjoner. Når du bruker Dev-C++-kompilatoren, er den som standard på C++ 3-versjonen, så den må endres til C++ 11-versjonen manuelt. GNU C++11-miljøet kan velges ved å endre språkstandardinnstillingene.



Åpne Dev-C++ kompilatoren og gå til 'Verktøy' på oppgavelinjen. Velg 'Compiler Options' og velg deretter 'Settings', klikk på 'Code Generation'-blokken, en liste over kommandoene vises. Velg GNU C++11 fra 'Language Standard(-std)' og klikk deretter OK. Nå er denne kompilatoren klar til å støtte trådoperasjoner.




Last ned bibliotekene fra GitHub og plasser dem i lib-mappen til Cpp-kompilatoren. Kall disse bibliotekene i programmet ved å bruke #include 'mingw.thread.h' og header-filer, nedenfor er syntaksen:





std::thread thread_object ( anropsbar ) ;


Std::-tråden støttes av #include 'mingw.thread.h'-headerfilen i C++11. Det er en trådklasse og representerer en enkelt tråd. En ny tråd opprettes ved hjelp av std::thread og en callable sendes til den. Callable er en kjørbar kode, som kjøres når tråden kjører. Anropsbar kan være hvilken som helst av de tre typene gitt nedenfor:

Når et objekt er opprettet, starter det en ny tråd som kjører koden i den anropbare.



Lansering av tråd ved hjelp av funksjonsobjekt

Et funksjonsobjekt kan brukes som et callable for å starte tråden, overload-operatøren () gjør det callbart:

klasse funksjon_objektklasse {
ugyldig operatør ( ) ( params )
{
Uttalelser;
}
}
std::thread thread_object ( funksjonsobjektklasse ( ) , params )


Overbelastningsfunksjonen leveres til konstruktøren som det første objektet og setninger som det andre objektet.

Start av tråd ved hjelp av funksjonspeker

En funksjonspeker er definert, og den brukes deretter som en kallbar for å starte en tråd:

void function_call ( param )
{
Uttalelser;
}
std::thread thread_obj ( function_call, params ) ;


Argumenter som skal vedtas skrives etter navnet på funksjonen.

Lansering av tråd med Lambda Expression

Trådobjektet kan startes ved å bruke lambda som callable.

// Definer et lambda-uttrykk
auto f = [ ] ( params )
{
Uttalelser;
} ;

std::thread thread_object ( f, params ) ;


Lambda-uttrykket er definert, og parametrene kalles i det for å starte tråden.

I noen tilfeller må tråden stoppe før den begynner å utføre neste kommando. De std::tråd::bli med () funksjonen brukes til å vente på at tråden slutter. For eksempel, i tilfelle vi tilordner en oppgave med  GUI til tråden, må vi vente på slutttiden for å laste inn GUI-en ordentlig først, og deretter utføres neste kommando.

int main ( )
{

std::tråd t1 ( anropsbar ) ;
t1.bli med ( ) ;
Uttalelser;
}

Eksempel

Dette er et program som kjøres for å utføre multithreading ved å bruke alle tre callable. Tre forskjellige anropbare utfører sine respektive kommandoer samtidig tre ganger uten å bli avbrutt av hverandre:

#include
#inkluder
bruker navneområde std;


ugyldig foo ( int Z )
{
til ( int i = 0 ; Jeg < Z; i++ ) {
cout << 'Tråd som bruker funksjon'
'-pekeren som anropbar \n ' ;
}
}


klasse thread_obj {
offentlig:
ugyldig operatør ( ) ( int x )
{
til ( int i = 0 ; Jeg < x; i++ )
cout << 'Tråd som bruker funksjon'
' objekt som kan kalles \n ' ;
}
} ;


// hovedkode
int main ( )
{
cout << 'Tråd 1 og 2 og 3'
'å operere uavhengig'
<< endl;


tråd th1 ( foo, 3 ) ;


tråd th2 ( thread_obj ( ) , 3 ) ;


auto f = [ ] ( int x ) {
til ( int i = 0 ; Jeg < x; i++ )
cout << 'Tråd med lambda'
' uttrykk som kan kalles \n ' ;
} ;


tråd th3 ( f, 3 ) ;

th1.bli med ( ) ;

th2.bli med ( ) ;

th3.bli med ( ) ;

komme tilbake 0 ;
}


I dette programmet brukes de tre kallbare inkludert funksjonspeker, funksjonsobjekt og lambda-uttrykk for å starte de tre trådene samtidig. Tråd 1, 2 og 3 skriver ut verdiene sine samtidig, uavhengig av hverandre, uten å bli avbrutt av hverandre. De trykker verdiene sine tre ganger. Funksjonen join() brukes til å vente på at tråden slutter.


Utgangene fra alle tre trådene vises uavhengig og gjentas tre ganger. Hver tråd venter på at den andre skal slutte først.

Konklusjon

Multithreading i C++ er en funksjon som lar en utføre flere oppgaver samtidig samtidig. Flertrådsprogrammet har to eller flere seksjoner som kan kjøres samtidig, hver del er kjent som en tråd og har en egen bane for utførelse. Det er tre kallbare for å starte tråder, funksjonspekere, funksjonsobjekter og lambda-uttrykk. Disse aktiverer multithreading.