pthread & its bug

bjorn rohde jensen bjensen@fastmail.fm
Fri Mar 23 22:57:00 GMT 2007


John (Eljay) Love-Jensen wrote:
> Hi Mohsen,
> 
> Your inquiry is off topic for this forum.  I do not say this to chastize you.  I say it because you may get better / faster / more accurate information from a more appropriate forum that is pthread savvy.
> 
> There are a whole bunch of errors in your test source code.
> 
> For example, the pthread_create's third parameter takes a function pointer to a function that looks like:
> 
> void* task(void* ptr);
> 
> You are passing in a function pointer to a function that looks like:
> 
> void task(int* counter);
> 
> And you are casting the function pointer to a data pointer:
> 
> (void*)task1
> 
> That doesn't fit.
> 
> Another example, pthread_create's first parameter takes a pointer to a pthread_t.  You are passing in a poiter to a pointer to a pthread_t.  (And that pointer-to-a-pointer has not been allocated anywhere.)
> 
> That doesn't fit.
> 
> Work through all the mismatched data types, and then see where things end up.  GCC helps you, by emitting a lot of warnings and errors.  Heed them.
> 
> Don't forget to:
> 
> gcc test.c -lpthread
> 
> HTH,
> --Eljay

You might want to define your task functions to have the type expected
by phtread_create instead of casting them, something like;

void *task1(void *p)
{
  int *counter=(int *)p;

    while(*counter < 5 ){
        printf("task1 count: %d\n",*counter);
        (*counter)++;
    }

    return NULL;
}

The type system is there to help you, dont cast things unless you really
need to.



More information about the Gcc-help mailing list