C ++ STDThread -funksjoner

C ++ STDThread -funksjoner
En prosesss enkeltsekvensstrøm kan betegnes som en tråd. Tråder blir ofte referert til som "lette prosesser" siden de har noen egenskaper med prosesser. En klasse er å representere distinkte utførelsestråder. En enkelt utførelsestråd er representert med klassetråden. Flere funksjoner kan kjøres på en gang på grunn av tråder. Når et trådobjekt opprettes, begynner det øyeblikkelig å utføre (underlagt eventuelle OS -planleggingsforsinkelser) som starter på den høyeste funksjonen som er spesifisert som funksjonskonstruktør. Metodens definerte verdi blir ignorert og STD :: avsluttes påkalles hvis den kommer ut ved å øke en feil.

Typer tråder

En prosesss spesielle seriestrøm blir referert til som en tråd. Tråder er betegnet som uvesentlige prosedyrer, da de ligner på prosesser på mange måter. Selv om tråder betjenes sekvensielt, ser de ut til å løpe samtidig. Det er forskjellige tilstander for hver tråd.

  • en elektronisk teller
  • et sett med registre
  • et hylleområde

Prosesser

I hovedsak er prosesser programmene som sendes ut fra klar tilstand og planlagt for utførelse i CPU. Prosessbegrepet holdes av PCB (Process Control Block). En prosess kan produsere det som blir referert til som "barneprosesser" eller nye prosesser. Prosessen tar lengre tid å fullføre fordi den er isolert, noe som betyr at den ikke deler et minne med andre prosesser. Noen av følgende tilstander for prosessen kan være til stede: Ny, klar, løpende, venter, avsluttet eller suspendert.

Tråder

En tråd er en modul av en prosess. En prosess kan ha flere tråder, og alle disse trådene er inneholdt i metoden. Tre stater eksisterer for en tråd: løping, klar og blokkert. Tråden avsluttes raskere enn prosessen, men den isolerer ikke slik prosessen gjør.

De vanlige egenskapene mellom tråder og prosesser inkluderer

  • Bare en tråd eller prosess kan være operativ på en gang.
  • Påfølgende utførelse i prosessen.
  • Evnen til å generere barn.

Skillene mellom prosesser og tråd

  • Prosesser er selvregulerende; Tråder er ikke.
  • Mens prosesser kanskje ikke hjelper hverandre, er tråder designet for å gjøre det.

Tråd på brukernivå

Det blir utført i biblioteket på brukernivå; Systemanrop brukes ikke til å konstruere dem. Trådbryter krever ikke et OS -samtale eller en kjerneavbrudd. Kjernen administrerer dem som om de var entrådede prosesser, siden den ikke er klar over brukernivå-tråden.

fordeler

  • De eneste attributtene en tråd har er en stabelplass, en stabelpeker og et skiftregister.
  • Siden kjernen ikke gjør noen justeringer, er skapelsen enkel.
  • På grunn av fraværet av OS -anrop, er trådbryter raskt.
  • Det er kompatibelt med operativsystemer som forbyr flertråding.

En trådnivå tråd

Trådene administreres av kjernen. I tillegg holder kjernen også oversikt over prosessene ved å bruke den konvensjonelle prosessbordet. OS -kjernen har systemanrop for å håndtere og lage tråder.

fordeler

  • Gitt at kjernen har fullstendig informasjon om systemets tråder.
  • Planleggeren kan bestemme seg for å gi prosesser med et høyt antall tråder ekstra tid.
  • Bra for regelmessig blokkering av programmer.

Multi-Threading:

Et annet navn for en tråd er en lett prosess. Ved å dele opp en prosess opp i flere tråder, er parallellisme ment å oppnås. For eksempel kan mange faner i en nettleser representere forskjellige tråder. Flere tråder brukes av MS Word, inkludert en for behandling av innganger og en annen for å formatere teksten.

Definer en tråd () -funksjon

En klassetråd refererer til en bestemt gjennomføringstråd. I C ++ refererer begrepet “trådklasse” til STD :: trådklassen. Når det koblede trådobjektet er opprettet, er den øverste metoden som ble levert som en del av funksjonskonstruktøravtalen der trådutførelsen begynner. Implementeringskoden som må påberopes vil motta et nytt trådobjekt som er opprettet for å starte en tråd.

Som det ble sagt tidligere, kreves std :: tråd for å starte en ny tråd, og tråden må også være omgivende. Et kallbart er et program som må kjøres når tråden er aktiv. Med andre ord, hvis en ny tråd er påkrevd, må en omgivende leveres som et argument til konstruktøren av et objekt for std :: tråd. Etter det begynner den nylig genererte tråden og den kalte medfølgende funksjonen kjøres.

Prosesser vs tråder

Hovedskillet er at mens prosesser kjøres i forskjellige minneområder, tråder i en enkelt prosess delt minneplass. Fordi tråder ikke er helt uavhengige av hverandre som prosesser er, deler de OS -ressursene, kodeseksjonen og dataseksjonen med andre tråder.

Tråder har fordeler fremfor prosesser

  • Respons: hvis en prosess blir delt opp i mange tråder, kan hver tråds utgang returneres så snart den er ferdig med å løpe.
  • Raskere kontekstbryter: Kontekstbrytere mellom tråder skjer raskere enn kontekstbrytere i en prosess. CPU må gjøre mer overhead på grunn av prosessskifteskift.
  • Effektiv bruk av multiprosessorsystem: Hvis en prosess inneholder mange tråder, kan vi planlegge disse trådene på forskjellige prosessorer. Som et resultat ville det være raskere prosessutførelse.
  • Kommunikasjon tilrettelegges av det faktum at flere tråder deler et adresseplass. Mens vi er i prosess, må vi følge en bestemt kommunikasjonsmetode for to-prosess-kommunikasjon.
  • Ressursdeling: Alle tråder i en prosess kan dele ressurser som kode, data og filer.
  • Økt systemkapasitet: Når en oppgave skilles inn i flere tråder, behandles hver trådoperasjon som en funksjon, og øker antall metoder som er gjort i en gitt mengde tid, forbedrer systemkapasiteten.

Trådfunksjon i C++

I et operativsystem gir de (posix -tråden) for funksjoner, de funksjonene relatert til funksjoner. Vi kan lage mange tråder på denne måten for å støtte samtidig prosessstrøm. Det fungerer best på systemer med flere prosessorer eller kjerner, der utførelseshastigheten kan oppnås ved å implementere tråder på kjernenivå. Det kan også gjøres gevinster i systemer med en enkelt prosessor ved å dra nytte av IO eller andre systemtjenester som har en tendens til å pause prosesser.

Opprett () -funksjon

pthread_create: ny trådopprett

Parametere

  • Tråd: En peker til en usignert heltallverdi som inneholder tråd -IDen til den nyeste tråden som ble startet.
  • Attr: Attributter til en tråd, for eksempel dens løsrevne tilstand, planleggingsstrategi, stabeladresse osv., er definert av en struktur som kalles attr. For standard trådegenskaper, satt til NULL.
  • Start rutine: en peker til en tråds start subroutine. Funksjonen har bare ett attributt, men en struktur må brukes hvis mer enn en verdi må leveres til funksjonen.
  • Arg: En peker til et tomrom som inneholder en peker til funksjonens parametere som gitt av det foregående argumentet.

Exit () funksjon

pthread_exit: pleide å slutte å bruke en tråd

Parametere
Avslør, en peker til et heltall som inneholder trådens returstatus er en nødvendig parameter for denne prosedyren. Enhver tråd som venter på å bli med i denne tråden, må kunne se returstatusen fordi denne variabelenes omfang må være globalt.

Bli med () Funksjon

pthread_join: pleide å gå ut av tråden venter

Parametere

  • TH: Tråden venter på trådens identifikator.
  • Tråd retur: en peker til stedet der tråden beskrevet i utgangsstatusen er lagret.

Lik () funksjon

pthread_equal: Bestemmer om to tråder er like eller ikke. Funksjonen returnerer et ikke-null nummer hvis de to trådene er like, ellers null.

ST :: Trådskaping

I C ++ bygges tråder ved hjelp av STD :: trådklasse. En tråd er en unik utførelsesstrøm; Det ligner på å ha en hjelper til å fullføre en oppgave mens du er ferdig med en annen samtidig. Når all trådens kode er utført, stopper den. Når du etablerer en tråd, må noe overføres for å bli utført på den. Objektene som er oppført nedenfor kan sendes til en tråd.

Medlemstyper

ID: tråd -ID (offentlig)
Native_handle_type: native_handle_type (public)

Tråden muliggjør samtidig utførelse av flere oppgaver. I C ++ refererer begrepet “trådklasse” til STD :: trådklassen. Et nytt trådobjekt må genereres for å starte en tråd, og det må leveres til den utførende koden som må kalles. Den øverste metoden som ble levert som en del av funksjonskonstruktøravtalen er der trådutførelsen begynner etter at det koblede trådobjektet er opprettet.

Kallbart å bruke objekt

Et objekt kan gjøres kallbart ved å bruke denne metoden. For det er en klasse påkrevd og operatør () må overbelastes i den klassen. Programvaren som må kjøres når tråden dannes er inkludert i de overbelastede metodene.

Kallbar bruk av pekeren

En peker vil bli gjort kallbar ved å bruke denne metoden. I trådobjektet vises listen over parametere eller argumenter som er sendt til metoden ved siden av funksjonens navn.

Kallbar ved hjelp av funksjonspekeren

Å gi det til trådobjektet for utførelse oppnår ønsket resultat. Trådobjektets funksjonskonstruktør mottar et lambda -uttrykk kalt “LM” som sitt første argument før han mottar sine argumenter som sitt andre argument.

La oss diskutere forskjellige eksempler på std :: trådfunksjoner.

Eksempel 1

I dette tilfellet vil vi bruke en tråd med en peker.

#inkludere
#inkludere
Klassetest

offentlig:
void execute (std :: strengkommando)

for (int i = 0; i < 8; i++)

std :: cout<

;
int main ()

Test * testPtr = ny test ();
STD :: TRED TH (& Test :: Execute, TestPtr, "Verdier");
th.bli med();
slett testPtr;
retur 0;

Først inkluderer vi overskrifter -filene og i programmet. Vi oppretter klassen og spesifiserer navnet 'Test'. Deretter bruker vi den offentlige metoden og utfører strengkommandoen. Etter å ha utført strengkommandoen, vil vi søke om sløyfe og økning (0 til 8). Her bruker vi "cout" -erklæringen. Neste, vi kaller Main () -funksjonen. Sammen med dette kaller vi klassen 'test' og bruker en peker i den. Deretter passerer tråden pekeren. Deretter har vi brukt Join () -funksjonen, slett testpekeren og skriv inn 'Return 0'.

Eksempel 2

I dette tilfellet vil vi bruke en tråd uten peker.

#inkludere
#inkludere
klassenavn

offentlig:
statisk tomromstest (std :: strengkommando)

for (int i = 0; i < 3; i++)

std :: cout<

;
int main ()

STD :: TRED TH (& NAVN :: TEST, "NAVN");
th.bli med();
retur 0;

Bruk toppfiler og . Lag en klasse og tittelen på klassen er 'Navn'. Vi bruker den offentlige metoden og neste linje bruker en statisk medlemsfunksjon, og her passerer vi strengen. Bruk 'for' -sløyfen og initialiser deretter verdiene fra 0 til 3. Uttalelsen 'cout' brukes til å skildre verdien. I neste linje påkaller vi Main () -funksjonen, bruker tråd og passerer verdiene uten å bruke en peker. Deretter bruker vi join () -funksjonen og skriv inn 'Return 0'.

Eksempel 3

Her skal vi bruke tomrommetoperatøren.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
Klasselaboratorium
offentlig:
ugyldig operatør () (int a)

for (int i = 0; i < a; i++)
cout << "Number of threads :" << i << "\n";

;
int main ()

tråd T2 (lab (), 6);
T2.bli med();
retur 0;

I denne koden integrerer vi de nødvendige overskriftsfilene , . Vi bruker standard navneområde som STD. Vi legger til en klasse som heter 'Lab' og bruker dens offentlige metode. Bruk deretter tomrommetoperatøren og initialiser en variabel 'A' i den. Her vil vi bruke 'for' -sløyfen fra 0 til verdien av variabel 'a'. Videre vil vi skrive ut en uttalelse "antall tråder" ved å bruke "cout" -erklæringen. Vi påkaller main () -funksjonen. Innenfor dette vil en tråd som har verdien 6 bli erklært. Når en tråd får en samtale, kjører den en kode og viser meldingen på skjermen.

Konklusjon

I denne guiden snakket vi om tråden i C ++ -funksjoner. Deretter observerer vi forskjellige funksjoner av tråd i C++. Vi definerte tråden og også dens typer. Vi nevnte også forskjellige parametere for tråden. Vi har utført mange typer koder. I den første koden brukte vi en tråd med en peker, det er en ikke-statisk medlemsfunksjon. For det andre, i kode vi bruker tråd uten peker, er det en statisk medlemsfunksjon. Tredje og siste kode, vi brukte Void -operatøren, og da en tråd fikk verdien, viste den meldingen på skjermen.