multithreading c with examples
Kratek uvod v večnitnost v jeziku C ++.
V tej vadnici bomo dobili pregled večnitnosti v jeziku C ++.
Torej, kaj je nit? Nit je delovna enota določenega procesa. V operacijskih sistemih z več programi programi se različni procesi izvajajo hkrati.
Na podoben način bomo morda želeli izvajati iste primerke procesa hkrati. Vsak primerek procesa je v tem primeru dodeljen izvršilni enoti, imenovani nit. V večnitnem sistemu se številne niti izvajajo hkrati neodvisno druga od druge.
=> Tukaj si oglejte vodnik za začetnike C ++.
kje je omrežni varnostni ključ na usmerjevalniku
Pred C ++ 11 smo imeli podporo za nit POSIX. Toda ta funkcija je imela resne težave s prenosljivostjo, saj je delovala samo v operacijskem sistemu Linux ali UNIX. Tako imamo od C ++ 11 naprej en sam razred std :: nit ki definira vso funkcionalnost niti. Razredi in funkcije so definirani v datoteki glave.
Kaj se boste naučili:
Delo
Z uporabo std :: thread moramo preprosto ustvariti nov predmet niti in mu posredovati klicanega. Callable je izvedljiva koda, ki jo želimo izvršiti, ko se nit izvaja. Torej, kadar koli želimo novo nit, samo ustvarimo objekt std :: thread in prenesemo klicanega kot argument njegovemu konstruktorju.
Ko je objekt std :: thread ustvarjen, se zažene nova nit in izvede koda, ki jo ponuja callable.
Poglejmo, kako lahko definiramo klicani element, ki bo na voljo predmetu niti.
Klicatelja je mogoče opredeliti na tri načine.
# 1) Uporaba funkcije Function
Funkcijski objekt lahko uporabimo kot priklic v objektu niti. Za uporabo funkcijskega predmeta moramo imeti razred in v tem razredu preobremenimo operator (). Ta preobremenjena funkcija vsebuje kodo, ki se izvede, ko je nit ustvarjena.
/ / 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)
Upoštevajte način definiranja predmeta niti. Kot prvi parameter konstruktorju predmeta niti nudimo preobremenjeno funkcijo in nato kot drugi argument določimo njene argumente (parametre).
# 2) Uporaba kazalca funkcije
Klic, ki ga je mogoče uporabiti s kazalcem funkcije, lahko definirate na naslednji način.
void funct_call(params) //code to be executed }
Ko definiramo to funkcijo, lahko na naslednji način ustvarimo predmet niti s to funkcijo kot klicno.
std::thread thread_obj(funct_call, params);
Upoštevajte, da so argumenti (parametri), posredovani funkciji, navedeni za imenom funkcije v objektu niti.
# 3) Uporaba Lambda izraza
Lahko ga imamo tudi kot lambda izraz in ga posredujemo predmetu niti za izvedbo. Delček kode za isto je prikazan spodaj.
// Define a lambda expression auto f = ()(params) { // code for execution };
std::thread thread_object(f, params);
V zgornji kodi smo definirali lambda izraz f, ki ga nato posredujemo konstruktorju niti kot prvi argument, ki mu sledijo parametri (parametri) kot drugi argument.
std::thread join method
V nekaterih primerih bomo morda želeli, da se trenutno izvedena nit zaključi, preden začnemo drugo dejanje.
Klasičen primer je, ko odpremo aplikacijo GUI. V trenutku, ko odpremo aplikacijo, se zažene nit za nalaganje in inicializiranje grafičnega uporabniškega vmesnika in ne moremo izvesti nobenega dejanja, če nalaganje in inicializacija nista pravilno izvedeni, da zagotovimo pravilno delovanje GUI.
kako pretvoriti char v niz c ++
Razred std :: thread zagotavlja metodo join (), ki zagotavlja, da se trenutna nit (označena z * this) najprej konča, preden se izvede katero koli drugo dejanje.
Vzemimo naslednji primer,
int main() { std::thread t1(callable_code); ….. t1.join(); ….. }
V zgornjem primeru bo glavna funkcija morala počakati, da se nadaljuje, dokler se nit t1 ne konča. Na splošno funkcija združevanja niti blokira druga dejanja / funkcije, dokler klicanje niti ne zaključi izvajanja.
Primer niti
Predstavljamo popoln primer kodiranja za ustvarjanje in izvajanje niti v spodnjem programu.
#include #include using namespace std; // function to be used in callable void func_dummy(int N) { for (int i = 0; i Izhod:
Nit 1 :: kazalec => kazalnik funkcije
Nit 1 :: kazalec => kazalnik funkcije
Tema 3 :: callable => lambda izraz
Tema 3 :: callable => lambda izraz
Nit 2: objekt callable =>
Nit 2: objekt callable =>
V zgornjem primeru smo ustvarili tri niti z uporabo treh različnih klicanih funkcij, tj. Kazalca funkcije, predmeta in lambda izraza. Ustvarimo 2 primerka vsake niti in jih zaženemo. Kot je prikazano v izhodu, tri niti delujejo hkrati neodvisno druga od druge.
Priporočeno branje = >> Vodnik za testiranje niti
Zaključek
V tej vadnici smo z jasnim primerom videli koncepte večnitnosti v jeziku C ++. V naslednjih vajah bomo izvedeli več tem C ++, ki bi nam pomagale pisati robustne in učinkovite programe.
=> Preberite serijo Easy C ++ Training Series.
Priporočeno branje
- Vadnica za glavne funkcije Pythona s praktičnimi primeri
- Vadnica Python DateTime s primeri
- Izreži ukaz v Unixu s primeri
- Sintaksa ukaza Unix Cat, možnosti s primeri
- Uporaba kazalca v MongoDB s primeri
- Ls ukaz v Unixu s primeri
- Metoda sortiranja () MongoDB () s primeri
- Ukaz Grep v Unixu s preprostimi primeri