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 :
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
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 :
Le thread m'a toujours affiché la valeur 15 et jamais la valeur 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 main(){ while(1){ sckClient = 15; pthread_create(&th,NULL,client,(int*)&sckClient); sckClient = 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 ?
Partager