Come usare il multithreading in C ++

Come usare il multithreading in C ++

Multithreading è il concetto di eseguire più thread di esecuzione all'interno di un singolo programma. È una caratteristica molto utile in linguaggi di programmazione come C ++ in quanto ci consente di eseguire più operazioni contemporaneamente. In c++, multithreading può essere ottenuto tramite il Libreria, che fornisce una serie di classi e funzioni che consentono agli sviluppatori di creare, gestire e controllare più thread.

Multithreading è proprio come il multitasking. Significa che due o più thread sono in esecuzione contemporaneamente. In tale programma, ogni componente viene definito thread e ogni thread specifica un percorso univoco di esecuzione. Non esiste un supporto integrato per multithread programmi prima di C ++ 11. Questa funzione è invece totalmente fornita dal sistema operativo.

Multithreading può anche essere definito dividere un programma in thread più piccoli che eseguono contemporaneamente. La classe thread, che viene utilizzata per multithreading In C ++, consente di costruire numerosi thread e gestire la loro esecuzione.

Crea thread in C++

Per creare un thread in C ++, utilizziamo il STD :: Thread Classe, che è inclusa nella libreria di thread integrata. UN richiamabile viene fornito come argomento al costruttore di un oggetto della classe STD :: Thread Per generare un nuovo thread. Codice che viene eseguito quando un thread è attivo è noto come richiamabile. Quando costruiamo a STD :: Thread oggetto, viene stabilito un nuovo thread, che provoca il codice fornito da richiamabile essere gestito. Richiamabile può essere definito usando questi tre metodi.

Metodo 1: puntatore della funzione

Richiamabile le funzioni usando un puntatore di funzione possono essere definite in questo modo.

void function_call (parametri)

Quando la funzione è stata costruita, un oggetto thread contenente la funzione viene generato come segue:

std :: thread thread_obj (function_call, parametri);

Metodo 2: oggetto funzione

Mentre utilizziamo l'oggetto funzione, sfruttiamo l'idea del sovraccarico dell'operatore. Il codice che deve essere eseguito mentre si forma il thread è contenuto nella funzione sovraccarica.

class object_class
void operator () (parametri)

// codice da eseguire

;
std :: thread thread_object (object_class (), parametri)

Metodo 3: espressione di lambda

Richiamabile le funzioni usando un'espressione di lambda possono essere definite in questo modo.

auto f = [] (parametri)
// codice da eseguire
;
std :: thread thread_object (f, parametri);

Esempio di multithreading in c++

#includere
#includere
Utilizzo dello spazio dei nomi std;
void func_thread (int n)

per (int i = 0; i < N; i++)
cout << "Thread 1 :: callable => Usando un puntatore di funzione \ n ";


class thread_obj
pubblico:
void operator () (int n)
per (int i = 0; i < n; i++)
cout << "Thread 2 :: callable => Usando un oggetto funzione \ n ";

;
int main ()

auto f = [] (int n)
per (int i = 0; i < n; i++)
cout << "Thread 3 :: callable => Usando un'espressione Lambda \ n ";
;
Thread Th1 (func_thread, 2);
Thread Th2 (thread_obj (), 2);
Discussione Th3 (F, 2);
Th1.giuntura();
Th2.giuntura();
Th3.giuntura();
restituzione 0;

Nel codice sopra, abbiamo sviluppato tre thread con tre separati Callabili-Un puntatore di funzione, un oggetto e un'espressione di lambda. Ogni thread viene avviato come due istanze separate. Tre thread sono attivi contemporaneamente e separatamente, come indicato nell'output.

Produzione

Vantaggi e svantaggi del multithreading

Più lavoro può essere fatto più velocemente grazie a multithreading. Questo perché consente a numerosi thread di svolgere varie attività contemporaneamente. Multithreading Consente ai programmatori di svolgere attività di rete, elaborare foto o video ed eseguire calcoli complicati senza rallentare il resto dell'applicazione. Multithreading Aiuta a rendere le interfacce utente più reattive. Eseguendo il codice che modifica lo schermo in un thread separato, il thread dell'interfaccia utente viene mantenuto libero di svolgere altre attività, come rispondere all'input dell'utente. Ciò si traduce in interfacce utente più fluide e più veloci.

Tuttavia, ci sono alcune limitazioni all'utilizzo multithreading. Una delle sfide chiave quando si lavora multithread I programmi stanno evitando le condizioni di gara. Una condizione di gara è una situazione in cui due o più thread stanno cercando di accedere alla stessa risorsa condivisa allo stesso tempo, portando a un comportamento imprevedibile. Per evitare le condizioni della razza, gli sviluppatori utilizzano tecniche di sincronizzazione come mutex, semafori e barriere.

Conclusione

Multithreading In C ++ è un concetto potente che consente agli sviluppatori di creare programmi in grado di eseguire più attività contemporaneamente. Utilizzando la classe thread fornita dalla libreria, gli sviluppatori possono creare, gestire e controllare più thread. Multithreading può essere utilizzato per migliorare le prestazioni, aumentare la reattività e superare le limitazioni delle risorse del sistema. Tuttavia, a causa delle sfide coinvolte nel lavoro con multithread Programmi, gli sviluppatori devono fare attenzione e utilizzare tecniche di sincronizzazione appropriate per evitare le condizioni di razza.