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 : 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);
        }
}
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 : 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;
        }
}
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 ?