pthread_t pointeur en argument de pthread_create

Le premier argument de pthread_create est un pthread_t pointeur. Dans le programme bonjour ci-dessous, si le premier argument est un pointeur vers pthread_t (pthread_t*) au lieu d'un pthread_t (pthread_t) le programme se termine avec Segmentation fault...pourquoi?

Je ne me souviens pas de voir pthread_t* que le type déclaré de la premier argument de pthread_create.

Et le chapitre 2 de Butenhof du livre de la Programmation avec les Threads POSIX dit:

Pour créer un thread, vous devez déclarer une variable de type pthread_t [pas pthread_t*].

Mais selon la spécification le premier argument de pthread_create est un pointeur vers pthread_t, alors pourquoi l'erreur de segmentation?


Faute de Segmentation

pthread_t* thr;
pthread_create(thr, NULL, &hello, NULL);


Fonctionne OK

pthread_t thr;
pthread_t* pntr = &thr;
pthread_create(pntr, NULL, &hello, NULL);


bonjour programme:

#include <pthread.h>
#include <stdio.h>

void * 
hello(void *arg){
  printf("Hello\n");
  pthread_exit(NULL);
}

int 
main(int argc, char **argv){
  pthread_t thr = 1;
  pthread_create(&thr, NULL, &hello, NULL);



  pthread_join(thr, NULL);

  return 0;
}

pthread_create prototype:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);
Voir la différence entre défini et déclarée en stackoverflow.com/questions/1433204/...

OriginalL'auteur user454322 | 2012-12-19