Hi,
I'm looking up pthreads and it's going ok, but I'm getting a little confused with the (void *) casting, so I was hoping sombody could explain what exactly the variable t is when it is passed to the PrintHello function below. From my understanding, t holds as an example, 0 on the first run through the loop; it's then cast as type (void *) which makes it a pointer, but it's value is taken literally in the function when it is recast as an int, it isn't dereferenced, does this mean that the address t points to is 0? Isn't that usually a bad idea as that memory address could be reserved or whatever? Is this just a workaround for pthread's need for void* types?
Code:
void *PrintHello(void *threadid)
{
int tid;
tid = (int)threadid;
printf("Hello World! It's me, thread #%d!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc, t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %d\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);
}