当前位置:  开发笔记 > 编程语言 > 正文

当你"生成"循环时会发生什么?

如何解决《当你"生成"循环时会发生什么?》经验,为你挑选了1个好方法。

示例代码:

fn main() {
    use std::thread::spawn;
    spawn(|| { loop { println!("a") } });
    // `a` is never printed
}
fn main() {
    use std::thread::spawn;
    spawn(|| { loop { println!("a") } });
    loop { }
    // `a` is printed repeatedly
}

a在第二种情况下打印到标准输出,但在第一种情况下不一样.这是为什么?a在第一种情况下不应重复打印?



1> Shepmaster..:

a在第一种情况下不应重复打印?

不.从文件中thread:spawn,强调我的:

连接句柄将在被删除时隐式分离子线程.在这种情况下,子线程可能比父线程更长(除非父线程是主线程;当主线程完成时,整个过程终止.)此外,连接句柄提供了一个可用于加入子线程的连接方法线.如果子线程发生混乱,join将返回一个包含恐慌参数的Err.

您的整个程序退出,因为主线程已退出.孩子线程从来没有机会开始,更不用说打印任何东西了.

在第二个示例中,您可以防止主线程退出,也会导致主线程永久旋转.

当你spawn循环时会发生什么?

只要程序执行,该线程就会在循环中旋转.


在惯用法中,您不需要额外的花括号spawn,而且只需要导入std::thread然后调用它就更标准thread::spawn:

fn main() {
    use std::thread;
    thread::spawn(|| loop {println!("a") });
}

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有