SuperAPI AI 工具集

rust-impl-concurrency

编程与开发

查看项目

更新于 10-16 06:18

技能介绍

用途:帮助 Rust 开发者在多线程共享可变状态时选择正确的同步原语,并规避死锁、中毒与内存序错误。

主要能力:提供从原子类型、RwLock 到 Mutex 的决策树;讲解 Arc<Mutex<T>> 规范模式与 Arc::clone 用法;说明 Mutex 中毒的恢复策略(into_inner、重置或传播错误);介绍 RwLock 读写语义与写者饥饿风险;给出原子类型与 Ordering(Relaxed/Acquire/Release/AcqRel/SeqCst)速查;覆盖 thread::scope(1.63 稳定)借用非 'static 数据、thread_local! 每线程状态、锁顺序防死锁规则,以及 parking_lot 与 std::sync 的差异(无中毒、竞争下更快、可 const 构造)。

使用方式:按“原子 > RwLock > Mutex”优先级选择最廉价原语;始终克隆 Arc 而非内部值;尽快释放锁守卫;多锁时定义全局锁顺序;显式处理 PoisonError;非 'static 借用优先用 thread::scope。

限制与注意:std::sync::Mutex 不可重入,重复加锁会死锁;不得跨 .await 持有 MutexGuard(tokio 多线程运行时下守卫为 !Send),异步场景应使用 tokio::sync::Mutex;不得用 Relaxed 做跨线程同步;不得使用 Arc<RefCell<T>> 或 Rc<Mutex<T>>;compare_and_swap 自 1.50 起弃用,循环内用 compare_exchange_weak。RwLock 优先级策略依赖操作系统实现,不保证读者或写者优先。parking_lot 不跟踪中毒,.lock() 直接返回守卫。具体 API 表、示例与反模式见其 references 目录,资料未提供更多细节。