class Program
{
private static ReaderWriterLockSlim _LockSlim = new ReaderWriterLockSlim();
private static Hashtable list = Hashtable.Synchronized(new Hashtable()); static void Main(string[] args)
{
new Thread(new ParameterizedThreadStart(delegate(object obj) {
Write(, );
})).Start(); Thread.Sleep(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); new Thread(new ParameterizedThreadStart(delegate(object obj)
{
Read(, );
})).Start(); Console.ReadKey();
} /// <summary>
/// 对于i相同的线程进行阻塞保证不会并行多个
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
public static void Read(int i,int j)
{
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "即将进入读取状态");
_LockSlim.EnterReadLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "进入读取状态"); Thread.Sleep(j); _LockSlim.ExitReadLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "退出读取状态");
} public static void Write(int i, int j)
{
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "即将进入写入状态");
_LockSlim.EnterWriteLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "进入写入状态"); Thread.Sleep(j); _LockSlim.ExitWriteLock();
Console.WriteLine(DateTime.Now.ToString() + "\t线程" + i.ToString() + "退出写入状态");
} }

输出:

// ::      线程0即将进入写入状态
// :: 线程0进入写入状态
// :: 线程1即将进入读取状态
// :: 线程2即将进入读取状态
// :: 线程3即将进入读取状态
// :: 线程4即将进入读取状态
// :: 线程1进入读取状态
// :: 线程4进入读取状态
// :: 线程0退出写入状态
// :: 线程2进入读取状态
// :: 线程3进入读取状态
// :: 线程2退出读取状态
// :: 线程1退出读取状态
// :: 线程4退出读取状态
// :: 线程3退出读取状态

c# 多线程 读写分离的更多相关文章

  1. Java多线程之~~~ReadWriteLock 读写分离的多线程实现

    在多线程开发中,常常会出现一种情况,我们希望读写分离. 就是对于读取这个动作来说,能够同一时候有多个线程同 时去读取这个资源,可是对于写这个动作来说,仅仅能同一时候有一个线程来操作.并且同一时候,当有 ...

  2. python基础-11 socket,IO多路复用,select伪造多线程,select读写分离。socketserver源码分析

    Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...

  3. Mysql + keepalived 实现双主热备读写分离【转】

    Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论   架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...

  4. Mycat在MySQL主从模式(1主1从)下读写分离和及自动切换模式的验证

    实验环境 两台Centos7  MySQL5.7.12 IP地址为:192.168.10.36  192.168.10.37 一台Centos7 Mycat IP地址为:192.168.10.31 一 ...

  5. MySQL多数据源笔记2-Spring多数据源一主多从读写分离(手写)

    一.为什么要进行读写分离呢? 因为数据库的"写操作"操作是比较耗时的(写上万条条数据到Mysql可能要1分钟分钟).但是数据库的"读操作"却比"写操作 ...

  6. mysql之使用centos7实现主从复制(读写分离)的实现过程

    什么是主从复制? 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用(好处)! 1.做数据的热备,作为后备数据库,主数据库服务器故 ...

  7. MariaDB 10 (MySQL DB) 多主复制并实现读写分离

    ----本文大纲 简介 资源配置 拓扑图 实现过程 ==================== 一.简介 MMM 即Master-Master Replication Manager for MySQL ...

  8. mysql主从读写分离,分库分表

    1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...

  9. Mysql多实例安装+主从复制+读写分离 -学习笔记

    Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...

随机推荐

  1. vue-5-列表渲染

    一个数组的v-for<ul id="example-1"> <li v-for="item in items"> {{ item.mes ...

  2. 学习net core的一些疑问?

    所有的内容是否一定都要依赖注入? 获取配置文件的方式是否在类库是获取不到环境变量的? 老出现:InvalidOperationException: Unable to resolve service ...

  3. 查看文件 ls -lh

    查看文件 ll ls -l --block-size=k ls -lh

  4. sac cut

    Put a perl script here in order to remind myself of its correct usage:

  5. redis 五大数据类型之list篇

    1.lpush/lpop/rpop/rpush/lrange  这里的list就是链表,lpush就是从左往右插入数据,rpush就是从右往左插数据,lrange就是从左往右范围性的取值,pop就是弹 ...

  6. Unity3d代码及效率优化总结

    1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU. 2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unli ...

  7. maven搭建ssh项目及遇到的问题

    如果采用手动添加jar包的方式搭建项目,会使效率降低,传到github上时,下载时需要下载很多jar包,用maven管理项目可以提高效率 我在搭建maven项目时遇到了 1) java.lang.No ...

  8. Day20作业及默写

    1.请使用C3算法计算出链接图中的继承顺序-Link 一 graph BT id1[A]-->id2[B] id2[B]-->id6[F] id6[F]-->id7[G] id1[A ...

  9. QueryString中的加号变成空格解决方法

    通过Request.QueryString["CheckItem"]的方式调用值的时候,数值中的加号“+”会转换为空格“ ” 例如传输“ABC+EFG”,就会取到“ABC EFG” ...

  10. Maven3 package时报 'version' contains an expression but should be a constant

    父pom文件: <modelVersion>4.0.0</modelVersion> <groupId>com.wey</groupId> <ar ...