C - la Création de threads n

Je suis en train de travailler sur la fonction suivante. Cette fonction doit créer les n threads. Il doit aussi imprimer le tid de l'enfant thread. Mais pour le moment je suis peu confus. Quand j'ai de l'exécuter et de par exemple, j'ai créer 5 threads, il retourne tout le temps la même tid. Que j'ai compris le tid est le thread Id de l'appelant. En fait de même de l'appelant appeler tous ces threads ou ai-je quelque chose de mal.
Voici le code:

void spawnThreads( unsigned int n) {
   int threads = n, ret = -1;
   pthread_t * thread = malloc(sizeof(pthread_t)*threads);
   pid_t tid;
   int i;
   for(i = 0; i < threads; i++) {
       ret = pthread_creation(&thread[i], NULL, (void *(*)(void *)) foo, NULL); //foo does not do anything

       if( ret != 0) {
           printf("pthread error!\n");
       }

       tid = syscall(SYS_gettid);
       printf("%d %d\n", i, tid);
       printf("I just created thread %d\n", i);

       pthread_join(thread[i],NULL);
}

void * foo(void) {
    return NULL;
}

Par exemple, j'ai le pour la suite de l'entrée spawnThreads(4)
la sortie suivante:

 0 2411
 I just created thread 0

 1 2411
 I just created thread 1

 2 2411
 I just created thread 2

 3 2411
 I just created thread 3

Pour résumer, la fonction d'impression >i< >tid<. >tid< désigne le TID de l'enfant et >i< va de 1 à n.

Mais pourquoi dois-je obtenir quatre fois le même tid? Qu'ai-je fait de mal? Je vous serais reconnaissant, si quelqu'un pouvait m'expliquer ce qui s'est passé.

  • Ce n'est pas votre code. Ref pthread_creation
  • Aussi: (void *(*)(void *)) ce que la fonte?!
  • Vous êtes seulement l'appel syscall(SYS_gettid) de votre thread principal, pas les nouvelles discussions vous créez...
  • Je sais, mais j'ai dû le lire à plusieurs reprises. C'est juste plutôt LISPy.
InformationsquelleAutor tumbler | 2013-11-28