Когда ваша основная программа завершает работу, все потоки также закрываются. Это означает, что только один поток вызывает функцию exit () (или если основная подпрограмма завершается), тогда другие потоки завершат работу.
Вы не можете просто убить темы. Если вы убиваете потоки, которые выполняют работу, то в лучшем случае вы получаете утечку памяти, а в худшем - тупик. В любом случае это не красиво.
Любые ресурсы, которые очищаются при завершении процесса, будут очищаться при выходе из последнего потока (или если какой-либо поток вызывает функцию exit ()). Это включает в себя память (исключая разделяемую память, например, posix или sysv), файловые объекты (если ни у какого другого процесса нет открытого дескриптора для них) и некоторые другие типы объектов.
Все остальное, что является постоянным (например, временные файлы, некоторые типы совместно используемой памяти), вам необходимо очистить самостоятельно, либо перед выходом, либо (более надежно) в начале следующего запуска.