如何使用C#读写锁ReaderWriterLockSlim

2019-12-26 13:08:45于海丽
  • Thread.Sleep(10000);//模拟读取信息  Console.WriteLine("{0} Thread ID {1} doing end.", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode()); 
  • }  finally 
  • {  rwl.ExitUpgradeableReadLock(); 
  • Console.WriteLine("{0} Thread ID {1} ExitUpgradeableReadLock...", DateTime.Now.ToString("hh:mm:ss fff"), Thread.CurrentThread.GetHashCode());  } 
  • 读写锁对于性能的影响是明显的。

    下面测试代码:

     

     
    1. public class Program  { 
    2. static private ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();  static void Main(string[] args) 
    3. {  Stopwatch sw = new Stopwatch(); 
    4. sw.Start();  List<Task> lstTask = new List<Task>(); 
    5. for (int i = 0; i < 500; i++)  { 
    6. if (i % 25 != 0)  { 
    7. var t = Task.Factory.StartNew(ReadSomething);  lstTask.Add(t); 
    8. }  else 
    9. {  var t = Task.Factory.StartNew(WriteSomething); 
    10. lstTask.Add(t);  } 
    11. }  Task.WaitAll(lstTask.ToArray()); 
    12. sw.Stop();  Console.WriteLine("使用ReaderWriterLockSlim方式,耗时:" + sw.Elapsed); 
    13. sw.Restart();  lstTask = new List<Task>(); 
    14. for (int i = 0; i < 500; i++)  {