As I understand / interpret it (although I correct it if I am mistaken), threads of execution should contribute to one common task (if there is no interaction between threads, then they can also be separate processes after all one of the main points of the thread is to overcome the communication barrier between processes). Therefore, it seems logical that subtasks depart from the general task, and then re-join at a later point, instead of reaching a dead end. Also, seeing that when a thread is created, some of its parent resources are allocated to it, even if the thread does not return a value, it should still return what it gave in the first place, thus merging or “connecting” to the original thread.
source share