zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    iview表单验证 只能输入小数或者整数
    iView之Modal(一级弹窗和二级弹窗)
    Vue+iView 引入iconfont
    iView爬坑记——表单验证
    有关使用 iview 表单验证的问题
    数据结构
    数学
    Zookeeper
    maven 打包
    区块链
  • 原文地址:https://www.cnblogs.com/contraII/p/2818304.html
Copyright © 2011-2022 走看看