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

在Rust中使用多线程读取文件是否属于未定义行为?

这段Rust代码不属于未定义行为(UB)

这段代码创建了100个线程,每个线程都读取同一个本地文件./config/init.json,然后将内容去除首尾空白后转为字符串,最后等待所有线程执行完毕。

  • 操作系统会处理多线程对同一文件的读取操作,文件读取本身是线程安全的,多个线程同时读同一个文件不会触发数据竞争或未定义行为。
  • fs::read_to_string在Rust内部已经处理了文件读取的同步逻辑,只要文件存在且可读,每个线程都能独立获取完整的文件内容。
  • 代码中没有共享可变状态,每个线程的工作完全独立,不存在跨线程的数据竞争,完全符合Rust的安全规范。

唯一需要注意的是,如果文件在读取过程中被修改,不同线程可能会读到不同版本的内容,但这属于业务逻辑层面的一致性问题,并非语言定义的未定义行为。

fn main() {
    let mut threads = Vec::new();

    for _ in 0..100 {
        let thread = thread::spawn(move || {
            fs::read_to_string("./config/init.json")
                .unwrap()
                .trim()
                .to_string()
        });
        threads.push(thread);
    }

    for handler in threads {
        handler.join().unwrap();
    }
}

内容的提问来源于stack exchange,提问作者NaN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:15:44