Do I have to pthread_join each thread I create?

linux, multithreading

Solution

You don't need to join a thread, but it is a good idea. Without calling pthread_join(), there is a possibility that the main() function will return before the thread terminates. In this case, pthread_join() makes the application wait until the other thread finishes processing. Plus, when you join the thread, it gives you the opportunity to check for return values and make sure that everything went smoothly, and it gives you the opportunity to clean up any resources you may have shared with the thread.

EDIT: A function that may be of interest to you is pthread_detach(). pthread_detach() allows the thread's storage to be cleaned up after the thread terminates, so there is no need to join the thread afterwards.

Problem

From `pthread_join()` man page : When a `joinable` thread terminates, its memory resources (thread descriptor and `stack`) are not deallocated until thread performs `pthread_join` on it. Therefore, `pthread_join` must be called once for each `joinable` thread created to avoid memory leaks. Does it mean i need to join each thread i create to prevent leaks? But joining blocks the caller. Please, explain more.

Original source