Rapport Final Se Ensias Issam

Description
jh

Please download to get full document.

View again

of 23
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information
Category:

Documents

Publish on:

Views: 0 | Pages: 23

Extension: PDF | Download: 0

Share
Tags
Transcript
   1 Système d’exploitation   Rapport système d’exploitation  : TP 2 Réalisé par : GHANOUCH Issam ES-SLASSI RAZZOUKI Mehdi   2 Système d’exploitation   1- Creation des threads: #include <pthread.h> #include <stdio.h> void* print_xs (void* unused) { while (1) fputc ('x', stderr); return NULL; } int main () { pthread_t thread_id; pthread_create (&thread_id, NULL, &print_xs, NULL); while (1) fputc ('o', stderr); return 0; } En fait, dans la fonction main de ce programme, on fait la création d’un thread par la déclaration d’une variable de type  pthread_t  , qui stockera l’identifiant du thread, puis par un appel de la fonction  pthread_create  en lui passant dans les paramètres la fonction de thread void* print_xs (void* args) . La fonction main contient une boucle infinie qui affiche les ‘o’ et le thread affiche continuellement les ‘x’ sur l’écran.     3 Système d’exploitation   Voici une capture d’écran de l’exécution de ce code  : La succession des ‘  x’ et des ‘ o’ sur l’écran est imprévisible car le système d’exploitation (Linux) passe la main alternativement aux deux threads.  Pour la fonction de thread  print_xs,  il se termine avec return NULL . Pour la terminaison explicite du thread On peut la remplacer par l ’appel de la fonction  pthread_exit(NULL) . 2- Transmettre des données à un thread : #include <pthread.h> #include <stdio.h> Struct char_print_parms { /* Caractère à afficher. */ Char character ; /* Nombre de fois où il doit être affiché. */ Int count ; }; /* Affiche un certain nombre de caractères sur stderr.*/   4 Système d’exploitation   void* char_print (void* parameters) { struct char_print_parms* p = (struct char_print_parms*) parameters; int i; for (i = 0; i < p->count; ++i) fputc (p->character, stderr); return NULL; } int main () { pthread_t thread1_id; pthread_t thread2_id; struct char_print_parms thread1_args; struct char_print_parms thread2_args; /* Crée un nouveau thread affichant 30 000 x. */ thread1_args.character = 'x'; thread1_args.count = 30000; pthread_create (&thread1_id, NULL, &char_print, &thread1_args); /* Crée un nouveau thread affichant 20 000 'o'. */ thread2_args.character = ‘o’;  thread2_args.count = 20000; pthread_create (&thread2_id, NULL, &char_print, &thread2_args); Return 0 ; } Dans ce programme, nous avons créé 2 threads ( thread1_id   et thread2_id  ), l’un affiche sur l’écran des ‘x’ et l’autre des ‘o’, un certain nombre de fois, et ce par la même fonction de thread  print_char  , mais à laquelle on a passé des valeurs différentes pour chaque thread. Mais l’exécution de ce code n’a rien affiché sur l’écran car les valeurs passées en paramètres pour les 2 threads sont des variables locales créées par la fonction main. Le problème avec ce code c’est que rien n’empêche Linux d’ordonnancer les threads de telle sorte que main termine en premier ce qui provoque la destruction de ces variables locales. Pour remédier à cette situation, nous avons utilisé la fonction  pthread_join  pour forcer main à attendre la fin de l’exécution des deux threads.  
Related Search
Similar documents
View more...
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks