multithreading c with examples
En kort introduktion till multitrådning i C ++.
I den här handledningen får vi en översikt av multithreading i C ++.
Så vad är en tråd? En tråd är en arbetsenhet för en viss process. I operativsystem med flera programmeringar körs olika processer samtidigt.
På ett liknande sätt kanske vi vill utföra samma processinstanser samtidigt. Varje processinstans tilldelas i det här fallet en exekveringsenhet som heter thread. I ett multithreading-system körs många trådar samtidigt oberoende av varandra.
=> Ta en titt på C ++ nybörjarguiden här.
hur man lägger till en matris
Före C ++ 11 hade vi POSIX-trådstöd. Men den här funktionen hade allvarliga problem med portabilitet eftersom den bara fungerade på operativsystemet Linux eller UNIX. Således från och med C ++ 11 har vi en enda klass std :: tråd som definierar alla funktioner för trådar. Klasserna och funktionerna definieras i rubrikfilen.
Vad du kommer att lära dig:
Arbetar av
Med hjälp av std :: thread behöver vi helt enkelt skapa ett nytt trådobjekt och skicka det till en kallbar. En callable är en körbar kod som vi vill köra när tråden körs. Så när vi vill ha en ny tråd skapar vi bara ett objekt av std :: thread och skickar en anropbar som argument till dess konstruktör.
När std :: thread-objektet har skapats startas en ny tråd och koden som tillhandahålls av callable körs.
Låt oss se hur vi kan definiera ett anrop som ska tillhandahållas trådobjektet.
En anropbar kan definieras på tre sätt.
# 1) Använda funktionsobjektet
Vi kan använda ett funktionsobjekt som anropbart i trådobjektet. För att använda funktionsobjektet måste vi ha en klass och i den klassen överbelastar vi operatören (). Denna överbelastade funktion innehåller koden som ska köras när tråden skapas.
klocka in och ut programvara 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)
Notera hur trådobjektet definieras. Som den första parametern för konstruktören av trådobjektet tillhandahåller vi den överbelastade funktionen och anger sedan dess argument (params) som det andra argumentet.
# 2) Använda funktionspekaren
En anropbar med hjälp av funktionspekaren kan definieras på följande sätt.
void funct_call(params) //code to be executed }
När vi väl har definierat den här funktionen kan vi skapa ett trådobjekt med den här funktionen som anropbar på följande sätt.
std::thread thread_obj(funct_call, params);
Observera att argumenten (params) som skickas till funktionen ges efter funktionsnamnet i trådobjektet.
# 3) Använda ett Lambdauttryck
Vi kan också anropas som ett lambdauttryck och skicka det till trådobjektet för körning. Kodavsnittet för detsamma visas nedan.
// Define a lambda expression auto f = ()(params) { // code for execution };
std::thread thread_object(f, params);
I ovanstående kod har vi definierat ett lambdauttryck f och vi skickar det sedan till trådobjektkonstruktören som det första argumentet följt av dess parametrar (params) som det andra argumentet.
std::thread join method
I vissa fall kanske vi vill att den nuvarande körtråden ska avslutas innan vi börjar en annan åtgärd.
Ett klassiskt exempel är när vi öppnar GUI-applikationen. När vi öppnar programmet startas en tråd för att ladda och initiera GUI och vi kan inte utföra några åtgärder om inte laddning och initialisering görs korrekt för att säkerställa att GUI fungerar korrekt.
Klass std :: thread ger en join () -metod som säkerställer att den aktuella tråden (pekad av * detta) slutar först innan någon annan åtgärd vidtas.
hur man öppnar bin-filer i Windows
Ta följande exempel,
int main() { std::thread t1(callable_code); ….. t1.join(); ….. }
I ovanstående exempel måste huvudfunktionen vänta på att fortsätta tills tråden t1 är klar. I allmänhet blockerar trådens kopplingsfunktion andra åtgärder / funktioner tills trådkallningen är klar.
Exempel på tråd
Vi presenterar ett komplett kodningsexempel för skapande och körning av tråden i programmet som visas nedan.
#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 :: kallbar => funktionspekare
Tråd 1 :: kallbar => funktionspekare
Tråd 3 :: kallbar => lambdauttryck
Tråd 3 :: kallbar => lambdauttryck
Tråd 2 :: kallbar => funktionsobjekt
Tråd 2 :: kallbar => funktionsobjekt
I exemplet ovan har vi skapat tre trådar med tre olika anropbara, dvs funktionspekare, objekt och lambdauttryck. Vi skapar två instanser av varje tråd och startar dem. Som visas i utgången fungerar tre trådar samtidigt oberoende av varandra.
Rekommenderad läsning = >> Trådtestguide
Slutsats
I denna handledning har vi sett multithreading-koncepten i C ++ med ett tydligt exempel. I våra efterföljande handledning lär vi oss mer C ++ - ämnen som kan hjälpa oss att skriva robusta och effektiva program.
=> Läs igenom Easy C ++ Training Series.
Rekommenderad läsning
- Pythons huvudfunktionshandledning med praktiska exempel
- Python DateTime-handledning med exempel
- Klipp kommandot i Unix med exempel
- Unix Cat Command Syntax, alternativ med exempel
- Användning av markören i MongoDB med exempel
- Ls Command i Unix med exempel
- MongoDB Sort () -metod med exempel
- Grep Command i Unix med enkla exempel