Supposons qu'il existe un thread principal A, dont le travail consiste à calculer la somme des variables w et y où w=x+1, et y=z+2. Les valeurs des variables x et z doivent être récupérées par l'utilisateur. Dans ce scénario, nous pouvons créer deux threads, B et C. Le travail du thread B sera de prendre la valeur de la variable x de l'utilisateur, de l'incrémenter de 1, et de l'enregistrer dans la variable w. Le travail du thread C sera de prendre la valeur de la variable z de l'utilisateur, de l'incrémenter de 2, puis de l'enregistrer dans la variable y. Enfin, ces deux threads remettront ces résultats au thread principal A, qui calculera ensuite leur somme et affichera le résultat final.
Si nous n'avions créé aucun thread dans ce scénario, alors toutes les tâches auraient été effectuées par le thread principal A dans un temps beaucoup plus long. De cette façon, les threads peuvent effectuer efficacement vos calculs sans retards inutiles. Cependant, il existe une préoccupation majeure concernant l'utilisation des threads, connue sous le nom de « condition raciale ». C'est une situation dans laquelle deux threads essaient d'accéder et de modifier les mêmes données, les laissant ainsi incohérentes. En tant que programmeur, notre objectif devrait être d'éviter les conditions de course de la manière la plus gracieuse.
La solution la plus couramment utilisée pour éviter les conditions de course est l'utilisation de Mutex. Mutex signifie exclusion mutuelle, et il nous fournit essentiellement un mécanisme de verrouillage qui empêche l'accès et la modification des données critiques par plus d'un utilisateur à la fois. De cette façon, la cohérence des données est assurée. Posix est essentiellement une bibliothèque qui nous présente différentes fonctions intégrées qui facilitent beaucoup l'implémentation de threads et de Mutex. Avec l'exemple suivant, nous allons essayer d'apprendre l'utilisation de Posix Mutex avec la programmation C sous Linux Mint 20.
Exemple d'utilisation de Posix Mutex avec la programmation C dans Linux Mint 20
Nous allons effectuer les trois étapes suivantes pour vous guider dans l'utilisation de Posix Mutex avec la programmation C dans Linux Mint 20.
Étape #1: Création d'un programme démontrant l'utilisation de Posix Mutex avec la programmation C dans Linux Mint 20
Tout d'abord, nous allons créer un .cpp sur notre système Linux Mint 20. Nous allons simplement aller dans notre dossier Accueil, créer un document vide et le nommer Mutex.cpp. Une fois notre .cpp est créé, nous allons l'ouvrir avec l'éditeur de texte. Après cela, nous taperons le code affiché dans les images ci-dessous dans notre .fichier cpp :
Le code montré dans les deux images ci-dessus a créé deux threads différents. Le premier thread correspond au Job #1, tandis que le deuxième thread correspond au Job #2. Ensuite, nous avons créé un exemple de fonction nommée « Fonction Mutex ». Dans cette fonction, nous verrouillons d'abord la variable de verrouillage Mutex, et elle ne sera déverrouillée qu'une fois que le thread n°1 aura terminé le travail n°1. De même, la variable de verrouillage Mutex sera à nouveau verrouillée par le thread n°2 jusqu'à ce qu'elle termine le travail n°2. Cette « Fonction Mutex » est appelée par la fonction « principale ».
Étape #2 : Compilation du programme C dans Linux Mint 20
Après avoir enregistré le .cpp, nous allons maintenant le compiler via le terminal Linux Mint 20 avec la commande suivante :
$ gcc -o Mutex Mutex.cpp -pthread
Ici, "Mutex", après le drapeau "-o", fait référence au nom du fichier objet qui sera créé, alors que "Mutex.cpp" est le nom de l'original .fichier cpp. Le drapeau "-pthread" est nécessaire pour compiler ce programme car ce programme est écrit en utilisant la bibliothèque "pthread". Si vous omettez ce drapeau, votre programme ne sera pas compilé et affichera des erreurs. La compilation réussie de notre .cpp ne produira aucun message sur le terminal, comme le montre l'image ci-dessous :
Étape #3 : Exécuter le programme C dans Linux Mint 20
Une fois le fichier objet nommé « Mutex » créé, nous pouvons l'exécuter à l'aide de la commande suivante :
$ ./Mutex
En sortie de notre Mutex.cpp, vous remarquerez que le premier Job 1 a démarré, ce qui signifie que le thread #1 a acquis le verrou Mutex. Après cela, le travail 1 se termine après un certain temps. Ensuite, le Job 2 démarre, ce qui signifie que le thread #2 a acquis le verrou Mutex. Il ne sera déverrouillé qu'une fois le Job 2 terminé.
Conclusion
Cet article a fourni une explication détaillée de l'utilisation de Posix Mutex avec la programmation C dans Linux Mint 20. Le Mutex peut être utilisé très efficacement pour éviter les conditions de course lors de la programmation en incluant simplement la bibliothèque Posix ou pthread dans notre code C. Cela garantira non seulement la cohérence des données, mais rendra également le traitement beaucoup plus efficace.
La meilleure chose à propos de l'utilisation de la bibliothèque Posix sous Linux est que nous n'avons même pas besoin d'installer de logiciel, de package ou de compilateur spécialisé pour cela. Le code C peut simplement être écrit dans n'importe quel éditeur de texte par défaut sous Linux et peut être compilé et exécuté avec les compilateurs gcc ou g++ par défaut. Cela s'avère être une couche supplémentaire de facilité et de commodité dans l'utilisation de Posix Mutex avec la programmation C dans Linux Mint 20.