c# 关于线程的读写锁

 1 //读写线程锁
 2 static ReaderWriterLockSlim m_RWLock = new ReaderWriterLockSlim();
 3 
 4 while(true){
 5     DataTable dt = 从SQLServer获取一批数据;
 6     if (dt.Rows.Count <= 0)// 没有数据就退出
 7         break;
 8 
 9     处理数据代码1(如果SQLServer慢,处理数据代码放入线程)
10 
11     //阻塞,直到获取到写锁(写锁只允许一个线程读取数据)
12     //只有下面的ReadLock全部释放,这一步才能继续,
13     //这样可以读取数据库和写入Redis同步进行,节省读取数据库的时间
14     m_RWLock.EnterWriteLock();
15     //获取到写锁后,马上释放
16     m_RWLock.ExitWriteLock();
17     
18     // 使用线程写入到Redis
19     ThreadPool.UnsafeQueueUserWorkItem(state => { 
20         try
21         {
22             //获取读锁, 允许多个线程同时操作Redis
23             m_RWLock.EnterReadLock();
24             try
25             {
26                 处理数据代码2(如果Redis慢,处理数据代码放EnterWriteLock前面)
27                 
28                 WriteToRedis(item1.Key, item1.Value);
29             }
30             finally
31             {
32                 m_RWLock.ExitReadLock();
33             }
34         }
35         catch (Exception ex)
36         {
37             LogHelper.WriteException("异常:", ex);
38         }
39     }, null);
40 }
原文地址:https://www.cnblogs.com/contraII/p/2818304.html