You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:10:33