Для начала вам следует исследовать и попытаться найти основную причину, из-за которой поток зависает.
С точки зрения реализации, я бы go использовал шаблон слушателя / наблюдателя, где все дочерние потоки могут уведомлять родительский поток после завершения его работы. Для этого родительский элемент будет иметь ссылку на все свои дочерние потоки. Как только все дочерние элементы уведомят родителя, он может безопасно освободить все ресурсы и завершить себя.
В случае, когда дочерний поток никогда не отвечает родительскому, вы можете определить max-time-out
, выше которого вы считать поток зависшим и затем завершить его от родительского слушателя.
Надеюсь, это поможет !!