Hasty Briefsbeta

双语

In defense of lock poisoning in Rust

6 months ago
  • #Rust
  • #Concurrency
  • #Safety
  • Rust中的锁中毒机制是一种在关键代码段内检测和处理panic、防止系统损坏的机制。
  • 意外取消(如panic或异步future取消)可能破坏互斥锁的不变量,导致逻辑损坏。
  • 当关键代码段发生panic时,Rust的互斥锁中毒机制会将其标记为中毒状态,以警示潜在的数据损坏。
  • 将互斥锁默认设为非中毒的提案存在未检测到损坏的风险,因为panic时的静默解锁会隐藏错误。
  • 改进建议是让`lock()`在发现中毒时自动panic,既能减少语法噪音又能保持安全性。
  • 非中毒互斥锁仅适用于指标收集或日志记录等有限场景,出于安全考虑不应设为默认行为。
  • `Poison<T>`包装器可将中毒机制泛化到互斥锁之外,在保持默认安全性的同时提供灵活性。