Younestae

Disponible uniquement sur Etudier
  • Pages : 3 (662 mots )
  • Téléchargement(s) : 0
  • Publié le : 26 décembre 2010
Lire le document complet
Aperçu du document
Transmission des données à un thread
L'argument de thread est une méthode pratique pour passer des données à un thread. Comme son type est void*, cependant, on ne peut pas passer beaucoup de donnéesdirectement en l'utilisant. Au lieu de cela, on utilise l'argument de thread pour passer un pointeur vers une structure ou un tableau de données. Une technique couramment utilisée est de définir unestructure de données pour chaque argument de thread, qui contient les paramètres attendus par la fonction de thread. En utilisant l'argument de thread, il est facile de réutiliser la même fonctionpour différents threads. Ils exécutent alors tous les mêmes traitements mais sur des données différentes

Exemple #include #include /* Paramètres de la fonction print. */ 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 selon le contenu de PARAMETERS, qui est un pointeurvers une struct char_print_parms. */ void* char_print (void* parameters) { /* Effectue un transtypage du pointeur void vers le bon type. */ struct char_print_parms* p = (struct char_print_parms*)parameters; int i; for (i = 0; i < p->count; ++i) printf(“%c”,p->character);

return NULL; } /* Programme principal. */ int main () { pthread_t thread1_id; pthread_t thread2_id; struct char_print_parmsthread1_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); return0; }

Problème : Le thread principal (qui exécute la fonction main) crée les structures passées en paramètre aux threads (thread1_args et thread2_args) comme des variables locales puis transmet...
tracking img