créer de thread - passage d'arguments
Je cherche sur la création de plusieurs threads que chaque thread calcule un nombre premier. Je suis en train de passer un deuxième argument à une fonction à l'aide de fil de créer. Il continue de vomir erreurs.
void* compute_prime (void* arg, void* arg2)
{
voici mon main() à la créer de thread. &primeArray[i] après &max_prime me donne des erreurs.
for(i=0; i< num_threads; i++)
{
primeArray[i]=0;
printf("creating threads: \n");
pthread_create(&primes[i],NULL, compute_prime, &max_prime, &primeArray[i]);
thread_number = i;
//pthread_create(&primes[i],NULL, compPrime, &max_prime);
}
/* join threads */
for(i=0; i< num_threads; i++)
{
pthread_join(primes[i], NULL);
//pthread_join(primes[i], (void*) &prime);
//pthread_join(primes[i],NULL);
//printf("\nThread %d produced: %d primes\n",i, prime);
printf("\nThread %d produced: %d primes\n",i, primeArray[i]);
sleep(1);
}
l'erreur que j'obtiens est:
myprime.c: In function âmainâ:
myprime.c:123: warning: passing argument 3 of âpthread_createâ from incompatible pointer type
/usr/include/pthread.h:227: note: expected âvoid * (*)(void *)â but argument is of type âvoid * (*)(void *, void *)â
myprime.c:123: error: too many arguments to function âpthread_createâ
Il fonctionne très bien si je prends le deuxième argument.
- voir la réponse ci-dessous, découvrez également lien pour un bon pthread site de référence.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez passer qu'un seul argument à la fonction que vous appelez dans le nouveau thread. Créer une structure pour contenir à la fois des valeurs et de l'envoyer à l'adresse de la struct.
En cas de std::thread, l'utilisateur peut passer des arguments à la fonction de thread dans la méthode suivante
std::thread(funcName,arg1,arg2);
par exemple,
C'est le code de Manakarse , tout est vraiment bon, mais vous avez besoin d'un
pthread_join(fils[i],NULL)
juste pour être sûr que tous les threads d'exécuter avec succès avant la fin du thread principal("main sera "en attente" alors que tous les threads ne sont pas encore fini)
;