Comment utiliser le multithreading en C++

Comment Utiliser Le Multithreading En C



Multithreading est le concept d'exécution de plusieurs threads d'exécution dans un seul programme. C'est une fonctionnalité très utile dans les langages de programmation comme C++ car elle nous permet d'effectuer plusieurs opérations simultanément. En C++, multithreading peut être atteint via le bibliothèque, qui fournit un ensemble de classes et de fonctions permettant aux développeurs de créer, gérer et contrôler plusieurs threads.

Multithreading est comme le multitâche. Cela signifie que deux threads ou plus s'exécutent simultanément. Dans un tel programme, chaque composant est appelé thread, et chaque thread spécifie un chemin d'exécution unique. Il n'y a pas de support intégré pour multithread programmes antérieurs à C++ 11. Cette fonctionnalité est plutôt totalement fournie par le système d'exploitation.







Multithreading peut également être considéré comme la division d'un programme en threads plus petits qui s'exécutent simultanément. La classe thread, qui est utilisée pour multithreading en C++, permet de construire de nombreux threads et de gérer leur exécution.



Créer des threads en C++

Pour créer un thread en C++, nous utilisons le std :: fil classe, qui est incluse dans la bibliothèque de threads intégrée. UN appelable est fourni en argument au constructeur d'un objet de la classe std :: fil afin de générer un nouveau thread. Le code exécuté lorsqu'un thread est actif est appelé appelable . Lorsque nous construisons un std :: fil objet, un nouveau thread est établi, ce qui provoque le code fourni par appelable être exécuté. Appelable peut être défini à l'aide de ces trois méthodes.



Méthode 1 : pointeur de fonction

Appelable les fonctions utilisant un pointeur de fonction peuvent être définies comme ceci.





annuler function_call ( paramètres )

Lorsque la fonction a été construite, un objet thread contenant la fonction est généré comme suit :



std :: thread thread_obj ( appel_fonction, paramètres ) ;

Méthode 2 : objet de fonction

Lors de l'utilisation de l'objet fonction, nous profitons de l'idée de surcharge d'opérateur. Le code qui doit être exécuté pendant la formation du thread est contenu dans la fonction surchargée.

classe Object_class {
opérateur vide ( ) ( paramètres )
{
// code à exécuter
}
} ;
std :: thread thread_object ( Object_class ( ) , paramètres )

Méthode 3 : expression lambda

Appelable les fonctions utilisant une expression lambda peuvent être définies comme ceci.

auto f = [ ] ( paramètres ) {
// code à exécuter
} ;
std :: thread thread_object ( f, paramètres ) ;

Exemple de multithreading en C++

#include
#include
en utilisant l'espace de noms std ;

void func_thread ( entier N )
{
pour ( int je = 0 ; je < N; je++ ) {
écoute << 'Thread 1 :: callable => Utilisation d'un pointeur de fonction \n ' ;
}
}

classe thread_obj {
public:
opérateur vide ( ) ( entier n ) {
pour ( int je = 0 ; je < n; je++ )
écoute << 'Thread 2 :: callable => Utilisation d'un objet fonction \n ' ;
}
} ;

int main ( )
{

auto f = [ ] ( entier n ) {
pour ( int je = 0 ; je < n; je++ )
écoute << 'Thread 3 :: callable => Utilisation d'une expression lambda \n ' ;
} ;

fil th1 ( func_thread, 2 ) ;

fil th2 ( thread_obj ( ) , 2 ) ;

fil th3 ( F, 2 ) ;

th1.join ( ) ;

th2.join ( ) ;

th3.join ( ) ;

retour 0 ;
}

Dans le code ci-dessus, nous avons développé trois threads avec trois exigibles — un pointeur de fonction, un objet et une expression lambda. Chaque thread est démarré en tant que deux instances distinctes. Trois threads sont actifs simultanément et séparément, comme indiqué dans la sortie.

Sortir

Avantages et inconvénients du multithreading

Plus de travail peut être fait plus rapidement grâce à multithreading . En effet, il permet à de nombreux threads d'effectuer diverses tâches à la fois. Multithreading permet aux programmeurs d'effectuer des activités en réseau, de traiter des photos ou des vidéos et d'effectuer des calculs compliqués sans ralentir le reste de l'application. Multithreading aide à rendre les interfaces utilisateur plus réactives. En exécutant le code qui modifie l'écran dans un thread séparé, le thread d'interface utilisateur est libre d'effectuer d'autres tâches, telles que répondre à l'entrée de l'utilisateur. Cela se traduit par des interfaces utilisateur plus fluides et plus rapides.

Cependant, il existe certaines limites à l'utilisation multithreading . L'un des principaux défis lorsque l'on travaille avec multithread programmes évite les conditions de concurrence. Une condition de concurrence est une situation dans laquelle deux ou plusieurs threads tentent d'accéder à la même ressource partagée en même temps, ce qui entraîne un comportement imprévisible. Pour éviter les conditions de concurrence, les développeurs utilisent des techniques de synchronisation telles que les mutex, les sémaphores et les barrières.

Conclusion

Multithreading en C++ est un concept puissant qui permet aux développeurs de créer des programmes capables d'effectuer plusieurs tâches simultanément. En utilisant la classe de thread fournie par la bibliothèque, les développeurs peuvent créer, gérer et contrôler plusieurs threads. Multithreading peut être utilisé pour améliorer les performances, augmenter la réactivité et surmonter les limitations des ressources système. Cependant, en raison des défis liés au travail avec multithread programmes, les développeurs doivent être prudents et utiliser des techniques de synchronisation appropriées pour éviter les conditions de concurrence.