为何POSIX平台上Rust的fs::read_dir()具备线程安全性?
提问者3个月后的补充
撰写该问题时我对Rust多线程编程并不熟悉。提升技能后再看这篇帖子,我发现很容易验证这个问题:
// 使用作用域线程 // 无法编译,因为不能多次可变借用pwd use std::{ fs::read_dir, thread::{scope, spawn}, }; fn main() { let mut pwd = read_dir(".").unwrap(); scope(|s| { for _ in 1..10 { s.spawn(|| { let entry = pwd.next().unwrap().unwrap(); println!("{:?}", entry.file_name()); }); } }) }
// 使用内部可变性在多线程间共享 // 此代码可编译,因为应用了同步机制(RwLock) use std::{ fs::read_dir, sync::{Arc, RwLock}, thread::spawn, }; fn main() { let pwd = Arc::new(RwLock::new(read_dir(".").unwrap())); for _ in 1..10 { spawn({ let pwd = Arc::clone(&pwd); move || { let entry = pwd.write().unwrap().next().unwrap().unwrap(); println!("{:?}", entry.file_name()); } }).join().unwrap(); } }
内容的提问来源于stack exchange,提问作者Steve Lau
相关产品推荐
相关产品推荐

