multithreading c with examples
En kort introduktion til multithreading i C ++.
I denne vejledning får vi et overblik over multithreading i C ++.
Så hvad er en tråd? En tråd er en arbejdsenhed i en bestemt proces. I multi-programmering operativsystemer udføres forskellige processer samtidigt.
På en lignende måde vil vi måske udføre de samme procesforekomster samtidigt. Hver procesforekomst tildeles i dette tilfælde en eksekveringsenhed kaldet tråd. I et multithreading-system udføres adskillige tråde samtidigt uafhængigt af hinanden.
=> Se på C ++ begynderguiden her.
software til at kopiere dvd til computer
Forud for C ++ 11 havde vi POSIX-trådstøtte. Men denne funktion havde alvorlige bærbarhedsproblemer, da den kun fungerede på Linux- eller UNIX-operativsystemet. Således har vi fra C ++ 11 en enkelt klasse std :: tråd som definerer al funktionalitet for tråde. Klasser og funktioner er defineret i headerfilen.
Hvad du lærer:
Arbejder af
Ved hjælp af std :: thread er vi simpelthen nødt til at oprette et nyt trådobjekt og give det en kaldbar. En kaldbar er en eksekverbar kode, som vi vil udføre, når tråden kører. Så når vi vil have en ny tråd, opretter vi bare et objekt af std :: thread og sender en kaldbar som et argument til dens konstruktør.
Når std :: thread-objektet er oprettet, startes en ny tråd, og koden, der leveres af callable, udføres.
Lad os se, hvordan vi kan definere en kaldbar, der skal leveres til trådobjektet.
En kaldbar kan defineres på tre måder.
# 1) Brug af funktionsobjektet
Vi kan bruge et funktionsobjekt som en kaldbar i trådobjektet. For at bruge funktionsobjektet skal vi have en klasse, og i den klasse overbelaster vi operatøren (). Denne overbelastede funktion indeholder den kode, der skal udføres, når tråden oprettes.
er der en app til at planlægge Instagram-indlæg
/ / 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)
Bemærk den måde, hvorpå trådobjektet er defineret. Som den første parameter til konstruktøren af trådobjekt giver vi den overbelastede funktion og angiver derefter dens argumenter (parametre) som det andet argument.
# 2) Brug af funktionsmarkør
En kaldbar, der bruger funktionsmarkøren, kan defineres på følgende måde.
void funct_call(params) //code to be executed }
Når vi først har defineret denne funktion, kan vi oprette et trådobjekt med denne funktion som kaldbar på følgende måde.
std::thread thread_obj(funct_call, params);
Bemærk, at argumenterne (parametre), der sendes til funktionen, leveres efter funktionsnavnet i trådobjektet.
# 3) Brug af et Lambda-udtryk
Vi kan også have en kaldbar som et lambda-udtryk og videregive det til trådobjektet til udførelse. Kodestykket for det samme er vist nedenfor.
// Define a lambda expression auto f = ()(params) { // code for execution };
std::thread thread_object(f, params);
I ovenstående kode har vi defineret et lambda-udtryk f, og vi sender det derefter til trådobjektkonstruktøren som det første argument efterfulgt af dets parametre (params) som det andet argument.
std::thread join method
I nogle tilfælde ønsker vi muligvis, at den aktuelt udførende tråd afsluttes, før vi starter en anden handling.
Et klassisk eksempel er, når vi åbner GUI-applikationen. I det øjeblik vi åbner applikationen, startes en tråd til indlæsning og initialisering af GUI, og vi kan ikke udføre nogen handling, medmindre indlæsning og initialisering udføres korrekt for at sikre, at GUI'en fungerer korrekt.
Klassen std :: thread giver en join () -metode, der sikrer, at den aktuelle tråd (peget med * dette) slutter først, før der foretages andre handlinger.
Tag følgende eksempel,
int main() { std::thread t1(callable_code); ….. t1.join(); ….. }
I ovenstående eksempel skal hovedfunktionen vente på at fortsætte, indtil tråden t1 er færdig. Generelt blokerer trådens sammenføjningsfunktion andre handlinger / funktionalitet, indtil trådopkaldet afslutter sin udførelse.
database design interview spørgsmål og svar
Eksempel på tråd
Vi præsenterer et komplet kodeeksempel til oprettelse og udførelse af 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 Produktion:
Tråd 1 :: kaldbar => funktionsmarkør
Tråd 1 :: kaldbar => funktionsmarkør
Tråd 3 :: kaldbar => lambda-udtryk
Tråd 3 :: kaldbar => lambda-udtryk
Tråd 2 :: kaldbar => funktionsobjekt
Tråd 2 :: kaldbar => funktionsobjekt
I ovenstående eksempel har vi oprettet tre tråde ved hjælp af tre forskellige kaldbare, dvs. funktionsmarkør-, objekt- og lambda-udtryk. Vi opretter 2 forekomster af hver tråd og starter dem. Som vist i output fungerer tre tråde samtidigt uafhængigt af hinanden.
Anbefalet læsning = >> Trådtestguide
Konklusion
I denne vejledning har vi set multithreading-koncepterne i C ++ med et klart eksempel. I vores efterfølgende tutorials lærer vi flere C ++ - emner, der kan hjælpe os med at skrive robuste og effektive programmer.
=> Læs gennem Easy C ++ træningsserien.
Anbefalet læsning
- Pythons hovedfunktionsvejledning med praktiske eksempler
- Python DateTime-tutorial med eksempler
- Klip kommando i Unix med eksempler
- Unix Cat Command Syntax, indstillinger med eksempler
- Brug af markør i MongoDB med eksempler
- Ls Command i Unix med eksempler
- MongoDB Sort () metode med eksempler
- Grep Command i Unix med enkle eksempler