multithreading c with examples
Une brève introduction au multithreading en C ++.
Dans ce tutoriel, nous aurons un aperçu du multithreading en C ++.
Alors, qu'est-ce qu'un fil? Un thread est une unité de travail d'un processus particulier. Dans les systèmes d'exploitation à programmation multiple, différents processus s'exécutent simultanément.
De la même manière, nous pouvons vouloir exécuter les mêmes instances de processus simultanément. Chaque instance de processus, dans ce cas, est affectée à une unité d'exécution appelée thread. Dans un système multithreading, de nombreux threads s'exécutent simultanément indépendamment les uns des autres.
=> Jetez un œil au guide du débutant C ++ ici.
Avant C ++ 11, nous prenions en charge les threads POSIX. Mais cette fonctionnalité posait de sérieux problèmes de portabilité car elle ne fonctionnait que sur le système d'exploitation Linux ou UNIX. Ainsi à partir de C ++ 11, nous avons une seule classe std :: thread qui définit toutes les fonctionnalités des threads. Les classes et fonctions sont définies dans le fichier d'en-tête.
Ce que vous apprendrez:
Travail de
En utilisant std :: thread, nous devons simplement créer un nouvel objet thread et lui passer un appelable. Un appelable est un code exécutable que nous voulons exécuter lorsque le thread est en cours d'exécution. Donc, chaque fois que nous voulons un nouveau thread, nous créons simplement un objet de std :: thread et passons un appelable comme argument à son constructeur.
Une fois l'objet std :: thread créé, un nouveau thread est lancé et le code fourni par callable est exécuté.
Voyons comment nous pouvons définir un appelable à fournir à l'objet thread.
Un appelable peut être défini de trois manières.
# 1) Utilisation de l'objet Function
Nous pouvons utiliser un objet fonction comme appelable dans l'objet thread. Pour utiliser l'objet fonction, nous devons avoir une classe et dans cette classe, nous surchargons l'opérateur (). Cette fonction surchargée contient le code à exécuter lors de la création du thread.
transtypage de caractères en chaîne c ++
/ / 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)
Notez la manière dont l'objet thread est défini. En tant que premier paramètre du constructeur de l'objet thread, nous fournissons la fonction surchargée, puis spécifions ses arguments (paramètres) comme deuxième argument.
# 2) Utilisation du pointeur de fonction
Un pointeur de fonction appelable peut être défini de la manière suivante.
void funct_call(params) //code to be executed }
Une fois que nous avons défini cette fonction, nous pouvons créer un objet thread avec cette fonction comme appelable, de la manière suivante.
std::thread thread_obj(funct_call, params);
Notez que les arguments (params) passés à la fonction sont fournis après le nom de la fonction dans l'objet thread.
# 3) Utilisation d'une expression Lambda
Nous pouvons également avoir un appelable comme expression lambda et le transmettre à l'objet thread pour exécution. L'extrait de code correspondant est illustré ci-dessous.
// Define a lambda expression auto f = ()(params) { // code for execution };
std::thread thread_object(f, params);
Dans le code ci-dessus, nous avons défini une expression lambda f et nous la passons ensuite au constructeur d'objet de thread comme premier argument suivi de ses paramètres (params) comme deuxième argument.
std::thread join method
Dans certains cas, nous pouvons souhaiter que le thread en cours d'exécution se termine avant de commencer une autre action.
Un exemple classique est lorsque nous ouvrons l'application GUI. Au moment où nous ouvrons l'application, un thread pour charger et initialiser l'interface graphique est démarré et nous ne pouvons effectuer aucune action à moins que le chargement et l'initialisation ne soient effectués correctement afin de garantir que l'interface graphique fonctionne correctement.
La classe std :: thread fournit une méthode join () qui garantit que le thread actuel (pointé par * this) se termine en premier avant toute autre action.
Prenons l'exemple suivant,
int main() { std::thread t1(callable_code); ….. t1.join(); ….. }
Dans l'exemple ci-dessus, la fonction principale devra attendre pour continuer jusqu'à ce que le thread t1 se termine. En général, la fonction de jointure du thread bloque les autres actions / fonctionnalités jusqu'à ce que le thread appelant termine son exécution.
Exemple de fil
Nous présentons un exemple de codage complet pour la création et l'exécution du thread dans le programme ci-dessous.
#include #include using namespace std; // function to be used in callable void func_dummy(int N) { for (int i = 0; i Production:
Thread 1 :: callable => pointeur de fonction
Thread 1 :: callable => pointeur de fonction
Thread 3 :: callable => expression lambda
Thread 3 :: callable => expression lambda
Thread 2 :: callable => objet de fonction
Thread 2 :: callable => objet de fonction
Dans l'exemple ci-dessus, nous avons créé trois threads en utilisant trois différents appelables, à savoir un pointeur de fonction, un objet et une expression lambda. Nous créons 2 instances de chaque thread et les démarrons. Comme indiqué dans la sortie, trois threads fonctionnent simultanément indépendamment les uns des autres.
Lecture recommandée = >> Guide de test de filetage
meilleur logiciel de récupération de données windows 10
Conclusion
Dans ce didacticiel, nous avons vu les concepts de multithreading en C ++ avec un exemple clair. Dans nos didacticiels suivants, nous apprendrons plus de sujets C ++ qui nous aideraient à écrire des programmes robustes et efficaces.
=> Lisez la série de formations Easy C ++.
lecture recommandée
- Tutoriel sur les fonctions principales de Python avec des exemples pratiques
- Tutoriel Python DateTime avec des exemples
- Commande Cut sous Unix avec des exemples
- Syntaxe des commandes Unix Cat, options avec exemples
- Utilisation du curseur dans MongoDB avec des exemples
- Commande Ls sous Unix avec des exemples
- Méthode MongoDB Sort () avec exemples
- Commande Grep sous Unix avec des exemples simples