时间:2025-01-08 19:08
人气:
作者:admin
如书本作者所言,并发编程在绝大部分语言中,都是相对复杂和困难的。
所以,涉及的内容会相对多一些,所涵盖的内容绝对不是几篇文章所可以容纳的。
权当一个乱弹琴!
和此系列的其它文章一样,本文的内容绝大部分来自于相关书籍,本人做了一些摘裁的工作,取我所需!
以下例子是改自书本:
use std::thread; use std::time::Duration; fn main() { let v = vec![1, 2, 3,4,5,6,7,8,9,10]; let handle = thread::spawn(move ||->Vec<i32> { //如果这里不添加move关键字,编译会报错 println!("Here's a vector: {:?}",v); //循环v,每次等待50毫秒 for i in v.iter() { println!("T-1-waiting...:{} ***(^^)",i); thread::sleep(Duration::from_millis(50)); } v }); //循环10次,每次等待20毫秒 for x in 0..10 { println!("T-0-waiting...:{}",x); thread::sleep(Duration::from_millis(20)); } let p=handle.join().unwrap(); println!("It's back!{:?}",p); }

这个例子的几个重点:
thread::spawn 创建一个子线程,并返回一个JoinHandle<T>
#[stable(feature = "rust1", since = "1.0.0")] pub fn spawn<F, T>(f: F) -> JoinHandle<T> where F: FnOnce() -> T, F: Send + 'static, T: Send + 'static, { Builder::new().spawn(f).expect("failed to spawn thread") }
impl<'scope, T> JoinInner<'scope, T> { fn join(mut self) -> Result<T> { self.native.join(); Arc::get_mut(&mut self.packet).unwrap().result.get_mut().take().unwrap() } }
本文来自博客园,作者:正在战斗中,转载请注明原文链接:https://www.cnblogs.com/lzfhope/p/18660302