用途:帮助在 Rust 中设计基于线程的并发方案,明确所有权、共享与同步策略,并在编写、重构或评审并发代码时优先选择与协调需求匹配的最简原语。
主要能力与工作流:先对任务分类(独立 fork-join、生产者/消费者流水线、共享状态、一次性初始化、底层原子协调);优先让每个线程拥有自己的数据,仅在多线程需观察或修改时才引入共享所有权;子线程可借用栈数据且须在函数返回前结束时使用 std::thread::scope;用通道转移所有权与构建流水线,仅在共享状态模型更清晰时用 Arc<Mutex<T>> 或 Arc<RwLock<T>>;保持锁作用域短,持锁时不要调用用户可控或阻塞代码(除非这正是要保护的不变量);用 OnceLock 或 LazyLock 做线程安全的一次性初始化,而非临时全局可变状态;原子操作视为专用工具,默认用 SeqCst,直到有理由并记录更弱的内存序。
原语选择:借用局部数据到短生命周期线程用 std::thread::scope;转移工作或结果用 std::sync::mpsc 或项目通道库;共享读写状态用 Arc<Mutex<T>>;多读少写用 Arc<RwLock<T>>;等待条件变化用 Condvar 配合 Mutex;一次性全局初始化用 LazyLock 或 OnceLock;计数器、标志、无锁协调用 std::sync::atomic。引入新共享状态原语或审查易死锁代码前,先阅读 references/threading-shared-state.md。
安全与审查规则:跨线程边界的值需满足 Send,多线程共享引用需满足 Sync;决定中毒时是传播 panic 还是用 PoisonError::into_inner 恢复;存在多把锁时建立加锁顺序;当克隆值是所有权句柄且可读性重要时,优先 Arc::clone(&value) 而非 value.clone();纯 CPU 数据并行且项目已接受该依赖时用 Rayon。
测试:围绕最终状态、消息计数与关闭添加确定性测试;用屏障、通道或作用域线程协调测试,避免 sleep;当代码依赖 panic、发送端/接收端被丢弃或取消行为时,至少添加一个对应测试。
限制:资料未提供具体安装命令、版本要求、收费或平台信息。