CSharp多线程之RaceCondition
1. 什么是 Race Condition
当多个线程在没有同步机制的情况下同时读写共享数据,就可能导致数据不一致。
典型场景:
1 | |
可能结果并不是预期的 counter == 线程数,而是小于,因为:
counter++实际上分为三步:读取值 → 加 1 → 写回。如果两个线程同时读到相同值,最后一个写入会覆盖前一个。
2. 常见的解决方法
🔹 方法 1:lock(最常用)
1 | |
lock确保同一时间只有一个线程能进入代码块。性能较好,适合大多数情况。
🔹 方法 2:Interlocked(更轻量)
1 | |
Interlocked提供原子操作(Increment、Decrement、Add、CompareExchange)。比
lock更快,适合简单的数值操作。
🔹 方法 3:Monitor(比 lock 更底层)
1 | |
lock其实就是Monitor的语法糖。如果需要更复杂的控制(
Wait/Pulse),可以直接用Monitor。
🔹 方法 4:ReaderWriterLockSlim(读多写少场景)
1 | |
多个线程可同时读,但写时必须独占。
比单纯的
lock更高效(在读操作远多于写操作的情况下)。
CSharp多线程之RaceCondition
https://lshgame.com/2025/09/27/CSharp_Multithreading_RaceCondition/