It allows control flow to remain readily evident by the structure of the source code despite the presence of concurrency.
To be effective, this model must be applied consistently throughout all levels of the program – otherwise concurrent threads may leak out, become orphaned, or fail to have runtime errors correctly propagated.
However, Smith argues that this model is not true structured concurrency as the programming language is unaware of the joining behavior, and is thus unable to enforce safety.
Simple implementations will merely wait until the children and siblings of the failing thread run to completion before propagating the error to the parent scope.
The alternative is to employ a general cancellation mechanism (typically a cooperative scheme allowing program invariants to be honored) to terminate the children and sibling threads in an expedient manner.