Rust 程序设计语言 简体中文版 1.85.0defining closure: {list:?}"); thread::spawn(move || println!("From thread: {list:?}")) .join() .unwrap(); } 示例 13-6:使用 move 来强制闭包为线程获取 list 的所有权 我们生成了一个新的线程,并给这个线程传递一个闭包作为参数来运行,闭包体打印出列表。 i 等 于 9,它在主线程结束之前也只打印到了 5。 如果运行代码只看到了主线程的输出,或没有出现重叠打印的现象,尝试增大区间 (变量 i 的 范围) 来增加操作系统切换线程的机会。 使用 join 等待所有线程结束 由于主线程结束,示例 16-1 中的代码大部分时候不光会提早结束新建线程,因为无法保证线 程运行的顺序,我们甚至不能实际保证新建线程会被执行! 可以通过将 thread::spawn 执行的问题。thread::spawn 的返回值类型是 JoinHandle。JoinHandle 是一个拥有所有 权的值,当对其调用 join 方法时,它会等待其线程结束。示例 16-2 展示了如何使用示例 16-1 中创建的线程的 JoinHandle 并调用 join 来确保新建线程在 main 退出前结束运行。 文件名:src/main.rs use std::thread; use std::time::Duration; 0 码力 | 562 页 | 3.23 MB | 26 天前3
共 1 条
- 1













