C ++ Mutex Lock

C ++ Mutex Lock

C ++ est connu pour être l'un des langages de programmation les plus rapides avec de bonnes performances, une haute précision et un système de gestion de la mémoire adéquat. Ce langage de programmation prend également en charge l'exécution simultanée de plusieurs threads avec le partage de ressources multiples entre eux. Dans Multithreading, le thread est uniquement pour effectuer l'opération de lecture qui ne fait aucun problème car le thread n'est pas affecté par ce que font les autres threads à ce moment-là. Mais si ces threads devaient partager les ressources entre eux, un thread peut modifier les données à ce moment-là, ce qui fait le problème. Pour traiter ce problème, nous avons le «mutex» C ++ qui empêche l'accès de plusieurs ressources vers notre code / objet en fournissant la synchronisation qui indique que l'accès à l'objet / code peut être fourni à un seul thread à la fois, de sorte que plusieurs threads ne pourraient pas accéder à cet objet simultanément.

Procédure:

Nous apprendrons comment nous pouvons arrêter l'accès de plusieurs threads à un objet en un seul moment à l'aide de serrure Mutex. Nous parlerons de la syntaxe du serrure mutex, de ce qui est un threading multiple et de la façon dont nous pouvons traiter les problèmes causés par le filetage multiple à l'aide du serrure Mutex. Ensuite, nous prendrons un exemple du threading multiple et implémenterons la serrure mutex dessus.

Syntaxe:

Si nous voulons savoir comment implémenter le verrou de mutex afin que nous puissions empêcher l'accès de plusieurs threads simultanément vers notre objet ou notre code, nous pouvons utiliser la syntaxe suivante:

$ std :: mutex mut_x
$ mut_x. serrure ();
Void func_name ()
$ // Code que nous voulons masquer à plusieurs threads serait écrit ici
$ mut_x. unlocks ();

Nous allons maintenant utiliser cette syntaxe sur l'exemple factice et dans le code pseudo (que nous ne pouvons pas simplement exécuter tel qu'il est dans l'éditeur de code) pour vous faire savoir comment nous pouvons utiliser exactement cette syntaxe comme mentionné ci-dessous:

$ std :: mutex mut_x
Vide block ()
$ mut_x. serrure ();
$ std :: cout << “hello”;
$ mut_x. unlocks ();

Exemple:

Dans cet exemple, essayons d'abord de créer l'opération Multithread, puis d'entourer cette opération avec Mutex Lock et déverrouiller pour fournir la synchronisation de l'opération au code ou à l'objet créé. Mutex traite des conditions de course qui sont les valeurs assez imprévisibles et elles dépendent de la commutation des fils qui sont soucieux du temps. Pour implémenter l'exemple de mutex, nous devons d'abord importer les bibliothèques importantes et requises des référentiels. Les bibliothèques requises sont:

$ # Inclure
$ # Inclure
$ # Inclure

La bibliothèque «ioStream» nous offre une fonction pour afficher les données comme cout, lire les données sous forme de CIN et terminer la déclaration comme endl. Nous utilisons la bibliothèque «Thread» pour utiliser les programmes ou les fonctions à partir des threads. La bibliothèque «mutex» nous permet d'implémenter à la fois le verrouillage de mutex et le déverrouillage dans le code. Nous utilisons le «# include» car cela permet à tous les programmes liés à la bibliothèque incluse dans le code.

Maintenant, une fois l'étape précédente terminée, nous définissons la classe Mutex ou une variable globale pour le mutex en utilisant la std. Ensuite, nous créons une fonction pour Mutex Lock et déverrouiller que nous pourrions appeler par la suite dans le code. Dans cet exemple, nous nommons cette fonction comme un bloc. Dans le corps de la fonction de bloc, nous appelons d'abord le «mutex.Lock () ”et commencer à écrire la logique du code.

Le mutex.Lock () nie l'accès des autres threads pour atteindre notre objet ou notre code créé afin qu'un seul thread puisse lire notre objet en même temps. Dans la logique, nous exécutons une boucle pour une boucle qui s'exécute sur l'index de 0 à 9. Nous affichons les valeurs dans la boucle. Une fois cette logique créée dans le serrure de mutex après la fin de son opération ou après avoir quitté la logique, nous appelons le «Mutex.Méthode déverrouiller () ». Cet appel de méthode nous permet de déverrouiller l'objet créé à partir de Mutex Lock car l'accès de l'objet à un seul thread a été fourni plus tôt et une fois que l'opération sur cet objet est effectuée par un thread en même temps. Nous voulons maintenant que les autres threads accédaient également à cet objet ou à cet objet. Sinon, notre code se déplace dans la situation «de l'impasse» qui fait que l'objet créé avec le mutex reste dans la situation verrouillée pour toujours et aucun autre thread ne pourrait accéder à cet objet. Par conséquent, une opération incomplète continue d'exécuter. Après cela, nous quittons la fonction de bloc et passons à la principale.

Dans l'ensemble, nous affichons simplement notre mutex créé en créant les trois threads à l'aide du «std :: thread thread_name (appelant la fonction de bloc déjà créée ici dans laquelle nous avons créé le mutex)» avec les noms thread1, thread2 et thread3, etc. De cette façon, les trois fils sont créés. Nous rejoignons ensuite ces trois threads à exécuter simultanément en appelant le «thread_name. join () ”Méthode. Et puis, nous renvoyons la valeur égale à zéro. L'explication mentionnée précédemment de l'exemple est implémentée sous la forme du code qui peut être montrée dans la figure suivante:

Dans la sortie du code, nous pouvons voir l'exécution et l'affichage des trois threads un par un. Nous pouvons voir même si notre application relève de la catégorie du multithreading. Pourtant, aucun des threads n'a remplacé ou modifié les données et partagé la ressource modifiée en raison de l'implémentation du mutex du «bloc fonction».

Conclusion

Ce guide donne une explication détaillée du concept de la fonction mutex utilisée en c++. Nous avons discuté quelles sont les applications multithreading, quels problèmes nous devons rencontrer dans les applications multithreading, et pourquoi nous devons implémenter le mutex pour les applications multithreadistes. Nous avons ensuite discuté de la syntaxe du mutex avec l'exemple factice en utilisant le pseudo-code. Ensuite, nous avons implémenté un exemple complet sur les applications multithreading avec le mutex sur le C ++ Visual Studio.