Non-blocking pthread_join

Figo picture Figo · Sep 16, 2008 · Viewed 34.5k times · Source

I'm coding the shutdown of a multithreaded server.If everything goes as it should all the threads exit by their own, but there's a small chance that a thread gets stuck.In this case it would be convenient to have a non-blocking join so I could do.

Is there a way of doing a non-blocking pthread_join? Some sort of timed join would be good too.

something like this:

foreach thread do
  nb_pthread_join();
    if still running
      pthread_cancel();

I can think more cases where a a non-bloking join would be useful.

As it seems there is no such a function so I have already coded a workaround, but it's not as simple as I would like.

Answer

yves Baumes picture yves Baumes · Aug 7, 2009

If you are running your application on Linux, you may be interested to know that:

int pthread_tryjoin_np(pthread_t thread, void **retval);

int pthread_timedjoin_np(pthread_t thread, void **retval,
                                const struct timespec *abstime);

Be careful, as the suffix suggests it, "np" means "non-portable". They are not POSIX standard, gnu extensions, useful though.

link to man page