Fonction Pthread_Exit 3 C

Fonction Pthread_Exit 3 C
«Vous avez peut-être parcouru de nombreuses fonctions POSIX C lors de l'utilisation de n'importe quel système d'exploitation Linux. La fonction pthread_exit () est l'une de ces fonctions POSIX. Le pthread_exit () est utilisé pour terminer l'exécution du thread d'appel. Le thread d'appel est terminé à l'aide de la fonction pthread_exit (), et son exécution est suspendue à l'aide de la fonction pthread_join () jusqu'à ce que le thread cible ait terminé son exécution. Ainsi, il termine le thread d'appel et envoie l'état à n'importe quel thread qui utilise l'ID de thread du thread de terminaison pour appeler pthread_join (). Dans ce tutoriel, nous allons jeter un œil à l'utilisation de la fonction PTHEAD_KILL en C."

Tout d'abord, vous devez vous connecter à partir du système Linux et lancer son terminal. Dans le shell, essayez de créer un fichier C à l'aide de l'éditeur VIM et de le noms pthread_kill.c. Lorsqu'il est ouvert dans l'éditeur VIM en mode insert, écrivez les lignes de code ci-dessous.

Les fichiers d'en-tête essentiels sont incorporés dans les trois premières lignes de code, puis l'en-tête de fonction pour la fonction de message d'affichage, qui accepte un pointeur vide, est déclaré. Créez une variable globale après cela et définissez sa valeur sur 0. Deux variables de type pthread_t nommées thread_p & thread_s sont déclarées. Pthread_t est un type de données utilisé pour identifier un thread qui a été créé dans la fonction principale. Lorsque le programme fait des appels de fonction qui appellent une identification de thread, il prend la valeur renvoyée par la fonction pthread_create ().

Les variables de pointeur de deux caractères qui sont utilisées pour stocker le message pour les threads primaires et secondaires sont définies dans les lignes de code suivantes. Deux entiers sont ensuite définis, avec des valeurs de 100 et 200, respectivement. Après cela, nous avons fait deux threads distincts, chacun utilise la méthode du message d'affichage. Envoyer séparément les identificateurs de thread générés individuellement à chaque thread séparément; Après cette impression, l'instruction est appelée, qui est le message avant la fin des fils. Lorsque nous quittons ou terminons les threads alors, toute l'exécution est suspendue et aucune sortie ne sera affichée. La variable globale est incrémentée de 1 dans la fonction de message d'affichage.

Voir les fichiers et dossiers disponibles dans le répertoire de travail en entrant dans la commande LS dans la ligne de commande du terminal.

Entrez les commandes énumérées ci-dessous pour créer un fichier qui contient des instructions liées au thread car elles diffèrent des instructions de compilation standard. La commande est lancée avec le compilateur car nous utilisons le compilateur GCC et le système d'exploitation Linux. L'interrupteur -pthread est ensuite utilisé. Après avoir précisé le nom du fichier avec l'indicateur -o, le fichier de sortie sera créé avec le nom demandé.

Entrez simplement la commande (./ pthread kill.out) dans le terminal pour exécuter le fichier de sortie et afficher les résultats. Aucune instruction ne sera exécutée après l'instruction AVANT, car les deux threads sont terminés à l'aide de la fonction PTHREAD_EXIT. Dès que le thread principal a été établi, il appelle la méthode du message d'affichage, incrémentant la valeur de la variable globale de 0 à 1, qui est ensuite affichée. Semblable à cela, un deuxième thread est ensuite invoqué, qui affiche la valeur de la variable globale après un incrément, résultant en une valeur de 2.

Créez maintenant un autre fichier de code de programmation C à l'aide de VIM Editor et écrivez le code dedans. Le nom de fichier est pthread_exit.c.

Les fichiers d'en-tête vitaux sont incorporés dans les deux premières lignes du fichier de code. À partir de cela, une variable globale a été déclarée et sa valeur a été fixée à 0. La fonction d'affichage est ensuite écrite, et un paramètre de type pointeur vide lui est donné. Tous les threads que nous créons dans notre fonction principale exécuteront ce code. La valeur d'argument de la variable de filetage est stockée dans la première ligne de la fonction. Maintenant qu'une variable statique a été définie et définie sur 0, sa valeur sera modifiée dans la fonction. Ensuite, nous avons imprimé l'ID de thread et les valeurs des variables globales et statiques après les avoir incréments.

Utilisez le compilateur GCC pour compiler le code C avec l'option -pthread, puis enregistrez la sortie dans la sortie Pthread.dépose. Un seul thread peut terminer son exécution car nous utilisons le même ID de thread pour générer plusieurs threads, puis quitter le fil à l'intérieur de la boucle.

Voici la sortie du fichier après une compilation réussie. Cela signifie que si un thread est terminé à l'aide d'une instruction de sortie, aucun autre thread ne sera exécuté.

Chaque thread est généré et exécuté correctement si nous modifions légèrement le code en modifiant l'instruction de sortie et en déplaçant la ligne à l'extérieur de la boucle. Ceci est le morceau de code donné dans l'extrait ci-dessous:

Après la compilation et lorsque nous exécutons le fichier de sortie, la sortie ci-dessous sera générée, ce qui montre que tous les threads ont terminé leur exécution. La sortie montre que les valeurs des variables globales et statiques sont les mêmes pour tous les threads, ce qui signifie que la même référence de thread est utilisée.

Modifions un peu plus notre code et commençons l'instruction PTHREAD_EXIT à la fin de la fonction d'affichage. Voici l'écran du code:

Voici la capture d'écran de sortie du code ci-dessus. Seuls seulement trois fils sont exécutés; Vous pouvez voir les valeurs des variables globales et statiques. Les deuxième et troisième threads ont les mêmes valeurs pour les deux.

Conclusion

Cet article concerne l'utilisation de la fonction pthread_kill en C pour terminer le traitement d'un fil d'appel dans un programme, mais le processus de terminaison de la fonction d'appel doit être interrompu pendant un certain temps en utilisant la méthode pthread_join () jusqu'à ce que la méthode cible soit réalisé. Vous pouvez utiliser les exemples simples illustrés ci-dessus pour obtenir une compréhension claire.