Je viens de commencer l'apprentissage API pthreads et je suis suivant le tutoriel hereEst-il légitime de passer un argument comme nul *?
Cependant, dans un exemple de programme de pthread_create
, le programme d'échantillonnage crée une variable longue et passe sa valeur, typecasted comme void*
. Dans la fonction d'entrée de fil, il le déréférence tout comme un long.
Est-ce légitime? Je comprends si je passe l'adresse de la variable t
, chaque thread agirait sur la même variable et non sur une copie de celui-ci. Pouvons-nous faire cela parce que c'est un void*
et le compilateur n'a aucune idée du type que nous envoyons?
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Donc, votre question concerne la validité de cast ou la validité du pointeur de passage en tant que 4ème argument pour pthread_create()? – qrdl
@qrdl: en fait c'est les deux mais j'étais plus intéressé par le passage long comme 4ème argument pour pthread_create faisant complier pense que vous envoyez réellement une adresse. –