本随笔续接:.NET 同步与异步之锁(ReaderWriterLockSlim)(八)
之前的随笔已经说过、加锁虽然能很好的解决竞争条件,但也带来了负面影响:性能方面的负面影响。那有没有更好的解决方案呢?有,原子操作、即 Interlocked 这个类。
一、让我们先看一个计数的原子操作Demo
/// <summary> /// 原子操作-计数 /// </summary> public void Demo1() { Task.Run(() => { long total = 0; long result = 0; PrintInfo("正在计数"); Parallel.For(0, 10, (i) => { for (int j = 0; j < 10000000; j++) { Interlocked.Increment(ref total); result++; } }); PrintInfo($"操作结果应该为\t\t: {10 * 10000000}"); PrintInfo($"原子操作结果\t\t: {total}"); PrintInfo($"i++操作结果\t\t: {result}"); }); }