Questions relatives au fonctionement des threads
Bonjour,
Je developpe un proxy HTTP et j'utilise donc les threads pour gérer les connexions de chaque client. J'utilise phtread et je suis sous unix.Avant tout voici un bout de code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
void * client(void * arg){
int sck;
memcpy(&sck,arg,1);
printf("sck %d\n",sck);
pthread_exit(0);
}
main(){
while(1){
sckClient = sckAccept(,,);
pthread_create(&th,NULL,client,(int*)&sckClient);
}
} |
Pensez vous qu'il est nécessaire de verouiller la variable sckClient dans le main juste aprés pthread_create puis de la déverouiller dans la fonction client juste après le memset ?
Ceci afin de s'assurer que c'est la bonne valeur de l'id de la socket qui est copié.
Mais cela ne coserai t il pas un probléme si aprés avoir vérouiller le socket en ecriture, une demande accept retourne immédiatement avant que le memset de la fonction client est eu lieu ?
Personellement j'ai laisser tourner mon code en boucle en remplacant le main par ceci :
Code:
1 2 3 4 5 6 7 8
|
main(){
while(1){
sckClient = 15;
pthread_create(&th,NULL,client,(int*)&sckClient);
sckClient = 1;
}
} |
Le thread m'a toujours affiché la valeur 15 et jamais la valeur 1.
Deuxiéme question : pourquoi est t on obligé de passer le paramètre de la fonction client par adresse dans pthread_create ? (Oui je sais que client(void *) et pthread_create(,,,void **) mais pourquoi ? )
Et enfin sommes nous obligé de faire un appel a pthread_exit à la fin de la fonction client. N'est il pas appelé automatique lorsque le programme atteint la fin de la fonction ?