Younestae
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ées directement 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 une structure 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 fonction pour 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 pointeur vers 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_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; }
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 des