Нет . С большинством нетривиальных ОС вам не нужно явно/изящно прекращать потоки приложений при жизни, если только это не требует конкретной и неотложной необходимости.
Только одна причина заключается в том, что вы не всегда можете сделать это с помощью кода пользователя. Код уровня пользователя не может остановить поток, который работает в другом ядре, чем поток, требующий остановки. ОС может и делает.
Ваш Linux/ОС Windows очень хорош в прекращении потоков в любом состоянии на ядре и освобождении ресурсов, таких как потоки стеков, кучи, дескрипторы объектов OS/fd и т. Д. При завершении процесса. Это было миллионы часов тестирования в системах по всему миру, что вряд ли когда-либо испытает ваш собственный код пользователя. Если вы можете это сделать, вы должны позволить ОС делать то, что хорошо.
В других сообщениях было сделано несколько случаев, когда пользовательское завершение потока может быть неизбежным. Коммуникации между процессами - это одна область, а также соединения/транзакции БД. Если вас принуждают к этому по вашим требованиям, то хорошо, идите на это, но, в противном случае, не пытайтесь - это пустая трата времени и усилий написание/тестирование/отладка кода остановки потока, чтобы сделать то, что ОС может эффективно выполнять свой.
Остерегайтесь преждевременной остановки.
Вам необходимо позаботиться о ваших потоках. Используйте механизм связи между потоками при выходе из сигнального конца основного потока в другие потоки, затем присоедините потоки и подождите, пока они не будут остановлены. Это «чистый» способ. И сначала спросите себя, действительно ли вам нужны потоки (если он делает I/O, вам лучше использовать что-то еще большую часть времени) – mguijarr
что делать, если я использую реализацию блокирующей очереди, которая ждет нажатия? Я не хочу давать токен выхода в очереди. –
почему? это самый чистый подход – mguijarr