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
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.