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 }
  • 相关阅读:
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    Xcode5下去除Icon高光
    Unity3D-基本导航(NavMesh)功能实现
  • 原文地址:https://www.cnblogs.com/contraII/p/2818304.html
Copyright © 2011-2022 走看看