C#中各种Lock的速度比较

简单写了个小程序,比较了一下C#中各种Lock的速度(前提是都没有进入wait状态)。

各进入离开Lock 1kw次,结果如下:

Lock Time (ms)
No lock 58
CriticalSection 726
Interlocked 344
Readerslim 1932
Writerslim 1513
Reader 3754
Writer 3430
Mutex 24998
Semaphore 24197
Event 22549

 

结论如下:

  1. Interlocked可以直接编译为CPU指令,速度最快,虽然功能较少但能用则用。
  2. CriticalSection(也就是lock关键字或者Monitor.Enter()方法)仅比Interlocked慢,建议使用。
  3. 对于ReaderWriterLock和ReaderWriterLockSlim,Slim快近一倍,但缺点是不能track owner,也就是同一线程不能多次进入同一个lock。Reader比Writer要慢,估计是要维护reader count的原因。
  4. Mutex,Semaphore,Event即使可以获得lock也要进入内核模式,所以最慢,要尽量避免使用。

你可能感兴趣的:(C#中各种Lock的速度比较)