Kako koristiti višenitnost u C++

Kako Koristiti Visenitnost U C



Višenitnost je koncept pokretanja više niti izvršavanja unutar jednog programa. To je vrlo korisna značajka u programskim jezicima poput C++ jer nam omogućuje istovremeno izvođenje više operacija. U C++, višenitnosti može se postići putem knjižnica, koja pruža skup klasa i funkcija koje programerima omogućuju stvaranje, upravljanje i kontrolu više niti.

Višenitnost je poput multitaskinga. To znači da dvije ili više niti rade istovremeno. U takvom programu svaka se komponenta naziva nit, a svaka nit specificira jedinstveni put izvršenja. Ne postoji ugrađena podrška za višenitni programi prije C++ 11. Ovu značajku umjesto toga u potpunosti osigurava operativni sustav.







Višenitnost također se može nazvati dijeljenjem programa na manje niti koje se izvode istovremeno. Klasa niti koja se koristi za višenitnosti u C++, omogućuje vam konstruiranje brojnih niti i upravljanje njihovim izvođenjem.



Stvaranje niti u C++

Za stvaranje niti u C++ koristimo std::nit klasa, koja je uključena u ugrađenu biblioteku niti. A pozivivi isporučuje se kao argument konstruktoru objekta klase std::nit kako bi se stvorila nova nit. Kod koji se izvršava kada je nit aktivna poznat je kao pozivivi . Kada konstruiramo a std::nit objekta, nova nit je uspostavljena, što uzrokuje kod koji isporučuje pozivivi biti pokrenut. Poziv može se definirati pomoću ove tri metode.



Metoda 1: Pokazivač funkcije

Poziv funkcije pomoću pokazivača funkcije mogu se definirati ovako.





nevažeći poziv_funkcije ( parametri )

Kada je funkcija konstruirana, objekt niti koji sadrži funkciju generira se na sljedeći način:



std::nit thread_obj ( poziv_funkcije, parametri ) ;

Metoda 2: Funkcijski objekt

Dok koristimo funkcijski objekt, koristimo se idejom preopterećenja operatora. Kod koji se mora pokrenuti dok se nit formira nalazi se u preopterećenoj funkciji.

klasa Object_class {
void operator ( ) ( parametri )
{
// kod koji treba izvršiti
}
} ;
std::thread thread_object ( Klasa_objekta ( ) , parametri )

Metoda 3: Lambda izraz

Poziv funkcije koje koriste lambda izraz mogu se definirati ovako.

auto f = [ ] ( parametri ) {
// kod koji treba izvršiti
} ;
std::thread thread_object ( f, parametri ) ;

Primjer višenitnosti u C++

#include
#include
korištenje imenskog prostora std;

void func_thread ( int N )
{
za ( int i = 0 ; ja < N; i++ ) {
cout << 'Thread 1 :: callable => Korištenje pokazivača funkcije \n ' ;
}
}

klasa thread_obj {
javnost:
void operator ( ) ( int n ) {
za ( int i = 0 ; ja < n; i++ )
cout << 'Thread 2 :: callable => Korištenje funkcijskog objekta \n ' ;
}
} ;

int glavni ( )
{

auto f = [ ] ( int n ) {
za ( int i = 0 ; ja < n; i++ )
cout << 'Tret 3 :: callable => Korištenje lambda izraza \n ' ;
} ;

nit th1 ( func_thread, 2 ) ;

nit th2 ( nit_obj ( ) , 2 ) ;

nit th3 ( f, 2 ) ;

th1.pridružiti se ( ) ;

th2.pridružiti se ( ) ;

th3.pridružiti se ( ) ;

povratak 0 ;
}

U gornjem kodu razvili smo tri niti s tri odvojene pozivivi —pokazivač funkcije, objekt i lambda izraz. Svaka se nit pokreće kao dvije odvojene instance. Tri niti su aktivne istovremeno i odvojeno, kao što je naznačeno u izlazu.

Izlaz

Prednosti i nedostaci višenitnosti

Više posla može se obaviti brže zahvaljujući višenitnosti . To je zato što omogućuje brojnim nitima da izvršavaju različite zadatke odjednom. Višenitnost omogućuje programerima obavljanje mrežnih aktivnosti, obradu fotografija ili videa i izvođenje kompliciranih izračuna bez usporavanja ostatka aplikacije. Višenitnost pomaže u izradi korisničkih sučelja koja bolje reagiraju. Pokretanjem koda koji mijenja zaslon u zasebnoj niti, nit korisničkog sučelja ostaje slobodna za izvršavanje drugih zadataka, kao što je odgovaranje na korisnički unos. To rezultira lakšim i bržim korisničkim sučeljima.

Međutim, postoje neka ograničenja za korištenje višenitnosti . Jedan od ključnih izazova u radu sa višenitni programi izbjegavaju uvjete utrke. Stanje utrke je situacija u kojoj dvije ili više niti pokušavaju pristupiti istom dijeljenom resursu u isto vrijeme, što dovodi do nepredvidivog ponašanja. Kako bi izbjegli uvjete utrke, programeri koriste tehnike sinkronizacije kao što su muteksi, semafori i barijere.

Zaključak

Višenitnost u C++ je moćan koncept koji programerima omogućuje stvaranje programa koji mogu obavljati više zadataka istovremeno. Korištenjem klase niti koju nudi biblioteka, programeri mogu kreirati, upravljati i kontrolirati više niti. Višenitnost može se koristiti za poboljšanje performansi, povećanje odziva i prevladavanje ograničenja resursa sustava. Međutim, zbog izazova u radu sa višenitni programa, programeri moraju biti oprezni i koristiti odgovarajuće tehnike sinkronizacije kako bi izbjegli uvjete utrke.