Как Rust справляется с убийственными нитями?
Есть ли связь родитель-потомок между потоками, которые создаются? Если я убью нить, откуда я породил другие нити, убьют ли их тоже? Эта ОС специфична?
1 ответ
Как Rust справляется с убийственными нитями?
Это не так; нет способа убить нить.
Смотрите также:
- Как прервать или приостановить поток Rust из другого потока?
- Как проверить, закончил ли поток в Rust?
Есть ли связь родитель-потомок между потоками, которые создаются?
Когда вы создаете поток, вы получаете JoinHandle
это позволяет вам ждать завершения дочернего потока. Ребенок не знает родителя.
[что происходит с другими потоками] в контексте паники и смерти потока
Документация для thread::spawn
охватывает это хорошо:
Дескриптор соединения неявно отсоединяет дочерний поток после удаления. В этом случае дочерний поток может пережить родительский поток (если родительский поток не является основным потоком; весь процесс завершается, когда основной поток завершается). Кроме того, дескриптор соединения обеспечивает
join
метод, который можно использовать для присоединения дочернего потока. Если детская нить паникует,join
вернетErr
содержащий аргумент, данныйpanic
,
То есть после запуска дочернего потока то, что происходит с родительским потоком, в принципе не имеет значения, если только родительский поток не был основным, и в этом случае весь процесс завершается.