Compilation error for POSIX threads program

I amgetting an error when compiling the following program:

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#define NUM_THREADS30

extern "C" {

void * PrintHello(void *threadid)

{

printf("\n%d: Hello World!\n", threadid);

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("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);

}

The above code compiles and executes just fine in GNU g++ but fails with an error in SUN CC as follows:

CC -o test test.cc -lpthread

"test.cc", line 13: Error: "PrintHello(void*)" is expected to return a value.

1 Error(s) detected.

Message was edited by:

joe.vijay>

[1062 byte] By [joe.vijay] at [2007-11-26 9:01:51]
# 1
Although the pthread_exit function never returns C++ compiler does not know that fact. So it want to see 'return' in the definition of PrintHello. Just add something like 'return NULL'.
Atanasyan at 2007-7-6 23:08:49 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 2
And one more note. You do not need to call pthread_exit at all. The thread will be terminated when PrintHello returns. Look for example here: http://home.lanet.lv/~sd70058/aboutos/node65.html
Atanasyan at 2007-7-6 23:08:49 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 3

Why not do what the compiler is asking you to do?

[code]

void * PrintHello(void *threadid)

{

printf("\n%d: Hello World!\n", threadid);

pthread_exit(NULL);

return 0; // can't be reached

}

[/code]

A couple of other thread-related comments:

You're likely to see either no output or jumbled output. To ensure that your output goes out, either flush or use unbuffered IO (e.g., stderr).

Your main may exit before the thread executes. There are many ways to stop that. wait() [bad style], pthread_join(), a condition variable or a semaphore could all be used.

Paul

Paul_Floyd at 2007-7-6 23:08:49 > top of Java-index,Development Tools,Solaris and Linux Development Tools...
# 4
Thanks gentlemen, for these quick replies.
joevijay at 2007-7-6 23:08:49 > top of Java-index,Development Tools,Solaris and Linux Development Tools...