multithreading c with examples
En kort introduksjon til flertråding i C ++.
I denne opplæringen vil vi få en oversikt over multithreading i C ++.
Så hva er en tråd? En tråd er en arbeidsenhet for en bestemt prosess. I flerprogrammeringsoperativsystemer kjøres forskjellige prosesser samtidig.
På en lignende måte kan det være lurt å utføre de samme prosessforekomstene samtidig. Hver prosessforekomst, i dette tilfellet, er tilordnet en kjøringsenhet kalt tråd. I et multitrådesystem utføres mange tråder samtidig uavhengig av hverandre.
=> Ta en titt på C ++ Beginners Guide her.
prøve CV for erfaren programvaretester
Før C ++ 11 hadde vi POSIX-trådstøtte. Men denne funksjonen hadde alvorlige bærbarhetsproblemer, da den bare fungerte på Linux- eller UNIX-operativsystemet. Dermed har vi fra C ++ 11 og fremover en enkelt klasse std :: tråd som definerer all funksjonalitet for tråder. Klassene og funksjonene er definert i toppteksten.
Hva du vil lære:
Arbeider av
Ved å bruke std :: thread trenger vi ganske enkelt å lage et nytt trådobjekt og gi det en kallbar. En kallbar er en kjørbar kode som vi vil utføre når tråden kjører. Så når vi vil ha en ny tråd, lager vi bare et objekt av std :: thread og sender en kallbar som et argument til konstruktøren.
Når std :: thread-objektet er opprettet, lanseres en ny tråd og koden som tilbys av callable blir utført.
La oss se hvordan vi kan definere en kallbar som skal leveres til trådobjektet.
En kallbar kan defineres på tre måter.
# 1) Bruke funksjonsobjektet
Vi kan bruke et funksjonsobjekt som kalles i trådobjektet. For å bruke funksjonsobjektet må vi ha en klasse, og i den klassen overbelaster vi operatøren (). Denne overbelastede funksjonen inneholder koden som skal utføres når tråden opprettes.
klokke inn og ut programvare gratis
/ / Define the class for function object class functioObject_class { // Overload () operator void operator()(params) { // code to be executed } }; // Create thread object
std::thread thread_object(functioObject_class (), params)
Legg merke til måten trådobjektet er definert på. Som den første parameteren til konstruktøren av trådobjektet, gir vi den overbelastede funksjonen og spesifiserer deretter argumentene (params) som det andre argumentet.
# 2) Bruke Funksjonspeker
En anropbar funksjonspeker kan defineres på følgende måte.
void funct_call(params) //code to be executed }
Når vi har definert denne funksjonen, kan vi lage et trådobjekt med denne funksjonen som kallbar, på følgende måte.
std::thread thread_obj(funct_call, params);
Vær oppmerksom på at argumentene (parametre) som sendes til funksjonen, er gitt etter funksjonsnavnet i trådobjektet.
# 3) Bruk av et Lambda-uttrykk
Vi kan også ha en kallbar som et lambdauttrykk og overføre det til trådobjektet for utføring. Kodebiten for det samme er vist nedenfor.
// Define a lambda expression auto f = ()(params) { // code for execution };
std::thread thread_object(f, params);
I koden ovenfor har vi definert et lambdauttrykk f, og vi sender det til trådobjektkonstruktøren som det første argumentet etterfulgt av parametrene (params) som det andre argumentet.
std::thread join method
I noen tilfeller vil vi kanskje at den nåværende utførende tråden skal fullføres før vi starter en annen handling.
Et klassisk eksempel er når vi åpner GUI-applikasjonen. I det øyeblikket vi åpner applikasjonen, startes en tråd for å laste og initialisere GUI, og vi kan ikke utføre noen handlinger med mindre lasting og initialisering gjøres riktig for å sikre at GUI fungerer som den skal.
Klassen std :: thread gir en join () -metode som sikrer at den gjeldende tråden (pekt av * dette) avsluttes først før andre handlinger blir tatt.
Ta følgende eksempel,
int main() { std::thread t1(callable_code); ….. t1.join(); ….. }
I eksemplet ovenfor må hovedfunksjonen vente på å fortsette til tråden t1 er ferdig. Generelt blokkerer trådfunksjonen til tråden andre handlinger / funksjonalitet til trådkallingen fullfører kjøringen.
Eksempel på tråd
Vi presenterer et komplett kodeeksempel for opprettelse og gjennomføring av tråden i programmet vist nedenfor.
#include #include using namespace std; // function to be used in callable void func_dummy(int N) { for (int i = 0; i Produksjon:
Tråd 1 :: kallbar => funksjonspeker
Tråd 1 :: kallbar => funksjonspeker
Tråd 3 :: kallbar => lambdauttrykk
Tråd 3 :: kallbar => lambdauttrykk
Tråd 2 :: kallbar => funksjonsobjekt
Tråd 2 :: kallbar => funksjonsobjekt
I eksemplet ovenfor har vi opprettet tre tråder ved hjelp av tre forskjellige kallbare, dvs. funksjonspeker-, objekt- og lambda-uttrykk. Vi oppretter to forekomster av hver tråd og starter dem. Som vist i utgangen, fungerer tre tråder samtidig uavhengig av hverandre.
Anbefalt lesing = >> Trådtestguide
Konklusjon
I denne opplæringen har vi sett multithreading-konseptene i C ++ med et klart eksempel. I de påfølgende veiledningene vil vi lære mer C ++ - emner som kan hjelpe oss med å skrive robuste og effektive programmer.
hva er de beste musikknedlasterne
=> Les gjennom Easy C ++ Training Series.
Anbefalt lesing
- Python hovedveiledning med praktiske eksempler
- Python DateTime Tutorial med eksempler
- Klipp kommandoen i Unix med eksempler
- Unix Cat Command Syntax, Alternativer med eksempler
- Bruk av markør i MongoDB med eksempler
- Ls Command i Unix med eksempler
- MongoDB Sort () Metode med eksempler
- Grep Command i Unix med enkle eksempler