2026-06-09 / C# / .NET Core
C# lock、死锁与共享状态治理
聚焦 lock 的正确用法、死锁形成条件,以及如何通过锁顺序和临界区设计降低风险。
C#.NET
C# lock、死锁与共享状态治理
lock 的价值不是加速,而是保护共享状态的一致性。它让同一段临界区在同一时刻只被一个线程进入。
死锁为什么出现
死锁通常来自循环等待:线程 1 拿着锁 A 等锁 B,线程 2 拿着锁 B 等锁 A。
实践规则
- 锁对象保持私有。
- 不锁
this、字符串、typeof(...)。 - 临界区尽量短。
- 不在锁里做外部调用或阻塞 I/O。
- 多锁场景必须定义统一加锁顺序。