c# 多线程 读写分离
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# 多线程 读写分离的更多相关文章
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
在多线程开发中,常常会出现一种情况,我们希望读写分离. 就是对于读取这个动作来说,能够同一时候有多个线程同 时去读取这个资源,可是对于写这个动作来说,仅仅能同一时候有一个线程来操作.并且同一时候,当有 ...
- python基础-11 socket,IO多路复用,select伪造多线程,select读写分离。socketserver源码分析
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Mysql + keepalived 实现双主热备读写分离【转】
Mysql + keepalived 实现双主热备读写分离 2013年6月16日frankwong发表评论阅读评论 架构图 系统:CentOS6.4_X86_64软件版本:Mysql-5.6.12 ...
- Mycat在MySQL主从模式(1主1从)下读写分离和及自动切换模式的验证
实验环境 两台Centos7 MySQL5.7.12 IP地址为:192.168.10.36 192.168.10.37 一台Centos7 Mycat IP地址为:192.168.10.31 一 ...
- MySQL多数据源笔记2-Spring多数据源一主多从读写分离(手写)
一.为什么要进行读写分离呢? 因为数据库的"写操作"操作是比较耗时的(写上万条条数据到Mysql可能要1分钟分钟).但是数据库的"读操作"却比"写操作 ...
- mysql之使用centos7实现主从复制(读写分离)的实现过程
什么是主从复制? 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 主从复制的作用(好处)! 1.做数据的热备,作为后备数据库,主数据库服务器故 ...
- MariaDB 10 (MySQL DB) 多主复制并实现读写分离
----本文大纲 简介 资源配置 拓扑图 实现过程 ==================== 一.简介 MMM 即Master-Master Replication Manager for MySQL ...
- mysql主从读写分离,分库分表
1.分表 当项目上线后,数据将会几何级的增长,当数据很多的时候,读取性能将会下降,更新表数据的时候也需要更新索引,所以我们需要分表,当数据量再大的时候就需要分库了. a.水平拆分:数据分成多个表 b. ...
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
随机推荐
- day27 网络通信协议 tcp/udp区别
今日主要内容: 一.网络通信协议 二.tcp udp协议下的socket 一.网络通信协议 1.1互联网的本质就是一系列的网络协议 本机IP地址('127.0.0.1',xxxx) 互联网连接的电脑互 ...
- 深入理解Connector
上一篇主要是从各个容器的生命周期的角度讲了一下整个tomcat的运行流程,说明了各个容器之间的调用关系.但并没有太过详细的说明每一个组件并区分他们. 下面从功能的角度上详细的分析一下connector ...
- 服务器由于redis未授权访问漏洞被攻击
昨天阿里云拦截到了一次异常登陆,改了密码后就没有管他, 今天阿里云给我发消息说我的服务器可能被黑客利用,存在恶意发包行为....... 不过我不打算只是单纯的重置系统,经过一系列的查找原因后,发现被攻 ...
- Oauth2.0:Access Token 与 Refresh Token
access token 是客户端访问资源服务器的令牌.拥有这个令牌代表着得到用户的授权.然而,这个授权应该是临时的,有一定有效期.这是因为,access token 在使用的过程中可能会泄露.给 a ...
- Linux命令----su(切换用户)以及passwd(修改用户密码)
一.su命令登录root 用户在使用telnet命令可以远程登录,但不可以登录root,这样就需要使用su命令来登录root用户. telnet登录(不能登录root)--- 1.启动终端 输入 te ...
- FFT理解
*连续时间-周期性信号频谱 clc;clear;close all N = input('N= '); T = 0.05; n = 1:N; %原始数据输入 D = 2*pi/(N*T); %计算分 ...
- shell脚本实例-批量检查多个网站地址是否正常
#!/usr/bin/bash [ -f /etc/init.d/functions ] && . /etc/init.d/functions array=( http://www.w ...
- ChinaCock界面控件介绍-CCNewsSilder
上图是控件包里的Demo运行效果,轮播新闻图片. 这个控件用起来简单,拖放一个CCNewsSiler到Form上,设置Align为Top,再设置好高度,然后用代码加载图片: procedure TFo ...
- springboot (spring mvc)集成swagger
最近用springboot构建rest接口,考虑到最方便的验证接口,想到了引入swagger. 基本的步骤大致如下: 1.pom中引入swagger依赖: <dependency> < ...
- mssql,mysql,Oracle 数据库中获得UUID字符串
sql server : select replace(newId(),'-','') oracle :select sys_guid() from dual SQL> select sys_g ...