Ici, dans ce guide, nous vous expliquerons comment nous utilisons la classe Mutex en programmation C #. Nous fournissons différents exemples d'utilisation de cette classe mutex () dans notre programme C #. Nous effectuons les exemples donnés dans Ubuntu 20.04.
Exemple 1
Nous allons effectuer un exemple en utilisant cette classe mutex (). Comme nous utilisons l'Ubuntu 20.04 Pour effectuer ces exemples, nous devons ouvrir l'éditeur de texte de cet Ubuntu 20.04 puis créez un fichier avec n'importe quel nom de notre choix et enregistrez ce fichier avec l'extension de fichier de ".CS ". Puis saisissez le code suivant dans ce fichier. Nous expliquons également chaque ligne de ce programme donné en détail ci-dessous.
La première ligne de ce code C # est «Utilisation du système», une bibliothèque, et en utilisant cette bibliothèque, nous pouvons obtenir différentes classes et fonctions de notre code C #. Nous obtenons la classe «console» et la fonction «écriture» en utilisant cette bibliothèque. Le mot-clé «Utilisation» est utilisé pour recevoir des paramètres. Le système. Filation »est là pour générer des tâches et recevoir des objets de la classe. Maintenant, nous importerons l'espace de noms avec le nom «DemomUtex». Nous avons également créé une classe intitulée «Programme». Nous créons une instance appelée «mutex» qui est égale à «new Mutex ()». Le «nouveau» est un mot clé pour créer une nouvelle instance.
Ensuite, appelez la fonction «principale» dans notre code C #. Dans cette fonction «principale», nous avons une boucle «pour» utilisée pour créer cinq threads différents. Alors que cette boucle initialise «A» avec «1», la condition ici est «A<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.
Ensuite, nous avons «Threadobj.Start () "dans lequel" start () "est utilisé pour modifier l'état du" ThreadObj "à l'état en cours d'exécution. En dehors de cette boucle «pour», nous avons «console.Readkey () ". Cela utilisera pour attendre une pression. Nous avons une méthode ci-dessous avec le nom «Demomutex» qui est «statique». Nous utilisons cette méthode pour implémenter la synchronisation à l'aide du «mutex». La «console.Writeline »est là pour imprimer la déclaration écrite à l'intérieur. Après cette «console.Énoncé d'écriture », nous utiliserons la méthode« essai ».
Là encore, nous avons la «console.Énoncé d'écriture ». Lorsque vous verrez la sortie, il vous sera clair comment cette «console.Writeline ”imprime la déclaration donnée. Le fil.Sleep (2000) »est pour suspendre ou faire une pause de l'exécution du thread actuel pendant un certain temps qui est donné en tant que paramètre ici. Après cela, nous utilisons à nouveau la «console.Énoncé d'écriture ». Nous utilisons le mot-clé «mot-clé» pour nettoyer les ressources que nous allouons dans le bloc d'essai ou l'instruction à l'intérieur de ce bloc «enfin» exécuté lorsque l'instruction Try laisse le contrôle. À l'intérieur de l'instruction «enfin», nous appellerons la méthode «ReleasEmutex», qui est utilisée pour débloquer afin qu'un autre thread démarre l'exécution qui essaie d'exécuter.
Nous donnons également la sortie de ce code dans l'image ci-dessous. Vous pouvez voir comment ce code donne la sortie à l'écran. Nous compilons notre code avec cette commande, et lorsque le code est sans erreur, il créera un fichier EXE pour nous. Ce fichier «exe» est ensuite exécuté en utilisant la commande «mono». Et rappelez-vous que lorsque nous utilisons cette commande «mono», nous devons utiliser le «.Extension de fichier exe »avec le nom du fichier, puis exécutez cette commande pour obtenir la sortie.
Dans cette sortie, vous pouvez voir que lorsqu'un thread veut entrer dans la section critique, les autres threads veulent également entrer, mais ils doivent attendre que le premier thread termine l'exécution car nous utilisons la fonction Mutex «Waitone ()». Lorsque ce fil termine son exécution, le fil suivant entre et démarre son exécution et existe après avoir terminé sa tâche. Il permet au thread suivant d'entrer et de démarrer l'exécution. Les mêmes étapes sont répétées jusqu'à ce que la condition soit vraie.
Exemple n ° 2
Ici, nous avons une autre illustration en utilisant la méthode Mutex (). Essayons cet exemple pour comprendre ce concept.
Les mêmes déclarations utilisées dans ce code C # sont «Utilisation du système» et «Système.Filetage ". La classe est «mutexprogram» et dans la classe, nous avons créé une instance de la classe Mutex avec le nom «mutex» en utilisant le «nouveau» mot-clé, puis en appelant la fonction «principale» ci-dessous. La méthode waitone () essaie d'obtenir un verrouillage. Si le mutex n'est pas disponible, alors "waitone ()" bloque et attend jusqu'à ce qu'il soit disponible. Nous spécifions également une limite de temps ici. Si nous appelons la méthode WaitOne () sur «l'objet mutex» et que la limite de temps passe sans pouvoir acquérir le mutex, alors Waitone renvoie false. Quand il reviendra faux, la déclaration écrite ci-dessous sera exécutée: la «console.Énoncé d'écriture ». Et cette déclaration est utilisée pour l'impression.
Si nous nous réalisons, nous allons à la section de code exécutée, qui est la fonction «run ()», et cette fonction est définie ci-dessous. Lorsque «Run ()» se termine, le bloc «enfin» s'exécute, qui libère le mutex en utilisant «MutexRelease». Nous expliquons cette «mutexrelease» dans le code précédent. Nous définissons la fonction «run ()» ici dans laquelle nous allons imprimer une déclaration en utilisant «Console.WriteLine () "et enfin, nous avons la" console.ReadLine () ". Cette «console.Readline »est là pour la lecture de chaînes complètes jusqu'à ce que la touche Entrée soit enfoncée.
La sortie affiche uniquement les instructions "run ()" car elle renvoie vrai et se déplace vers "run ()". Si nous exécutons cela sur l'autre terminal simultanément, alors sur l'autre terminal, il affichera l'énoncé qui est écrit à l'intérieur de la déclaration IF car il essaie d'obtenir le «mutex» mais le «mutex» est déjà dans l'utilisation d'une autre application , il doit donc attendre que le «mutex» se lance.
Conclusion
Ce tutoriel explore le «mutex» en programmation C #. Nous démontons deux exemples ici et utilisons ce «mutex» afin que vous compreniez ce concept. Cette classe «mutex» nous fournira des fonctions «waitone ()» et «reveasEmutex ()». Ce "waitone ()" est utilisé pour le verrouillage, et le "ReaseMutEx ()" est utilisé pour déverrouiller la tâche ou le thread. Nous utilisons les deux méthodes dans nos exemples et expliquons tout cela en détail. J'espère que vous apprendrez ce concept «mutex» après une étude approfondie de ce guide et pourrez également utiliser cette classe «mutex» dans votre projet.