Kuidas kasutada C++-s multithreadingut

Kuidas Kasutada C S Multithreadingut



Mitmelõimeline on kontseptsioon mitme täitmislõime käitamisest ühes programmis. See on väga kasulik funktsioon sellistes programmeerimiskeeltes nagu C++, kuna see võimaldab meil teha mitut toimingut samaaegselt. C++ keeles, mitmelõimeline on võimalik saavutada raamatukogu, mis pakub klasside ja funktsioonide komplekti, mis võimaldavad arendajatel luua, hallata ja juhtida mitut lõime.

Mitmelõimeline on täpselt nagu multitegumtöö. See tähendab, et kaks või enam lõime töötab samaaegselt. Sellises programmis nimetatakse iga komponenti lõimeks ja iga lõim määrab kordumatu täitmistee. Sisseehitatud tugi puudub mitmelõimeline programmid enne C++ 11. Selle funktsiooni pakub täielikult operatsioonisüsteem.







Mitmelõimeline võib nimetada ka programmi jagamiseks väiksemateks lõimedeks, mis käivituvad samaaegselt. Keermeklass, mida kasutatakse mitmelõimeline C++-s võimaldab teil luua arvukalt lõime ja hallata nende täitmist.



Loo lõimed C++-s

Lõime loomiseks C++-s kasutame std::lõng klass, mis sisaldub sisseehitatud lõimeteegis. A helistatav esitatakse argumendina klassi objekti konstruktorile std::lõng uue lõime loomiseks. Kood, mis käivitatakse, kui lõim on aktiivne, on tuntud kui helistatav . Kui me ehitame a std::lõng objekti, luuakse uus lõim, mis põhjustab poolt pakutava koodi helistatav joosta. Helistatav saab määratleda nende kolme meetodi abil.



1. meetod: funktsiooni osuti

Helistatav funktsioonide kursorit kasutades saab defineerida niimoodi.





tühine funktsiooni_kutse ( parameetrid )

Kui funktsioon on konstrueeritud, genereeritakse funktsiooni sisaldav lõimeobjekt järgmiselt:



std::lõime lõime_obj ( funktsiooni_kutse, parameetrid ) ;

2. meetod: funktsioon Objekt

Funktsiooniobjekti kasutades kasutame ära operaatori ülekoormuse ideed. Kood, mida tuleb lõime moodustamise ajal käivitada, sisaldub ülekoormatud funktsioonis.

klass Objekti_klass {
tühi operaator ( ) ( parameetrid )
{
// käivitatav kood
}
} ;
std::lõime lõime_objekt ( Objekti_klass ( ) , parameetrid )

3. meetod: lambda ekspressioon

Helistatav lambda-avaldist kasutavaid funktsioone saab defineerida nii.

auto f = [ ] ( parameetrid ) {
// käivitatav kood
} ;
std::lõime lõime_objekt ( f, parameetrid ) ;

C++ mitmelõimestamise näide

#include
#include
kasutades nimeruumi std;

tühine func_thread ( int N )
{
jaoks ( int i = 0 ; i < N; i++ ) {
cout << 'Lõim 1 :: callable => Funktsioonikursori kasutamine \n ' ;
}
}

klassi lõime_objekt {
avalik:
tühi operaator ( ) ( int n ) {
jaoks ( int i = 0 ; i < n; i++ )
cout << 'Lõim 2 :: callable => Funktsiooniobjekti kasutamine \n ' ;
}
} ;

int main ( )
{

auto f = [ ] ( int n ) {
jaoks ( int i = 0 ; i < n; i++ )
cout << 'Lõim 3 :: callable => Lambda avaldise kasutamine \n ' ;
} ;

niit th1 ( func_thread, 2 ) ;

niit th2 ( thread_obj ( ) , 2 ) ;

niit th3 ( f, 2 ) ;

th1.liituma ( ) ;

th2.liituma ( ) ;

th3.liituma ( ) ;

tagasi 0 ;
}

Ülaltoodud koodis oleme välja töötanud kolm lõime, millest kolm on eraldi helistatavad -funktsiooni osuti, objekt ja lambda-avaldis. Iga lõime käivitatakse kahe eraldi eksemplarina. Kolm lõime on aktiivsed samaaegselt ja eraldi, nagu väljundis näidatud.

Väljund

Mitmekeermestamise eelised ja puudused

Tänu sellele saab rohkem tööd teha kiiremini mitmelõimeline . Seda seetõttu, et see võimaldab paljudel lõimedel korraga erinevaid ülesandeid täita. Mitmelõimeline võimaldab programmeerijatel teha võrgutoiminguid, töödelda fotosid või videoid ning teha keerulisi arvutusi ilma ülejäänud rakenduse tööd aeglustamata. Mitmelõimeline aitab muuta kasutajaliidesed tundlikumaks. Kui käivitate ekraani muutva koodi eraldi lõimes, jäetakse kasutajaliidese lõime vabaks muude toimingute tegemiseks, näiteks kasutaja sisendile vastamiseks. Selle tulemuseks on sujuvamad ja kiiremad kasutajaliidesed.

Siiski on kasutamisel mõned piirangud mitmelõimeline . Üks peamisi väljakutseid töötamisel mitmelõimeline programmid väldivad võistlustingimusi. Võistlusseisund on olukord, kus kaks või enam lõime üritavad samaaegselt juurde pääseda samale jagatud ressursile, mis viib ettearvamatu käitumiseni. Võistlustingimuste vältimiseks kasutavad arendajad sünkroonimistehnikaid, nagu mutexid, semaforid ja tõkked.

Järeldus

Mitmelõimeline C++ keeles on võimas kontseptsioon, mis võimaldab arendajatel luua programme, mis suudavad korraga täita mitut ülesannet. Teegi pakutavat lõimeklassi kasutades saavad arendajad luua, hallata ja juhtida mitut lõime. Mitmelõimeline saab kasutada jõudluse parandamiseks, reageerimisvõime suurendamiseks ja süsteemi ressursipiirangute ületamiseks. Kuid tööga seotud väljakutsete tõttu mitmelõimeline programmide puhul peavad arendajad olema ettevaatlikud ja kasutama sobivaid sünkroonimistehnikaid, et vältida võistlustingimusi.